zoukankan      html  css  js  c++  java
  • 抽象类与接口

    一、方法功能声明相同,但方法功能主体不同。那么这时也可以抽取,但只抽取方法声明,不抽取方法主体。那么此方法就是一个抽象方法。
    二、当定义了抽象函数的类也必须被abstract关键字修饰,被abstract关键字修饰的类是抽象类。
    三、抽象方法定义的格式:
     public abstract 返回值类型 方法名(参数);
          抽象类定义的格式:
     abstract class 类名 {
     }
    四、抽象类的特点:
    1、抽象类和抽象方法都需要被abstract修饰。抽象方法一定要定义在抽象类中。
    2、抽象类不可以直接创建对象,原因:调用抽象方法没有意义。
    3、只有覆盖了抽象类中所有的抽象方法后,其子类才可以创建对象。否则该子类还是一个抽象类。
    之所以继承抽象类,更多的是在思想,是面对共性类型操作会更简单
    五、抽象类的细节问题:
    1、抽象类一定是个父类? 
     是的,因为不断抽取而来的。
    2、抽象类中是否可以不定义抽象方法。
     是可以的,那这个抽象类的存在到底有什么意义呢?不让该类创建对象,方法可以直接让子类去使用
    3、抽象关键字abstract不可以和哪些关键字共存? 
    ? 1、private:私有的方法子类是无法继承到的,也不存在覆盖,而abstract和private一起使用修饰方法,
     abstract既要子类去实现这个方法,而private修饰子类根本无法得到父类这个方法。互相矛盾。
    4、 抽象方法一定在抽象类中
     抽象类中不一定有抽象方法
     抽象类不能创建对象
    5、普通类继承抽象类,普通类必须重写抽象类中的所有抽象方法,该类才能是个普通类
    六、 方法重载:在一个类中,出现方法名相同,参数列表不同(参数类型、个数、顺序)
     方法重写:子父类继承关系中,子类中出现与父类中返回值类型,方法名,参数列表一模一样的方法
    七、接口的概念
    接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类”。
    接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来完成。这样将功能的定义与实现分离,优化了程序设计。
    请记住:一切事物均有功能,即一切事物均有接口。
    八、接口的定义
    与定义类的class不同,接口定义时需要使用interface关键字。
    定义接口所在的仍为.java文件,虽然声明时使用的为interface关键字的编译后仍然会产生.class文件。这点可以让我们将接口看做是一种只包含了功能声明的特殊类。
    定义格式:
    public interface 接口名 {
    抽象方法1;
    抽象方法2;
    抽象方法3;
    }
    使用interface代替了原来的class,其他步骤与定义类相同:
    接口中的方法均为公共访问的抽象方法
    接口中无法定义普通的成员变量
    九、类实现接口
    类与接口的关系为实现关系,即类实现接口。实现的动作类似继承,只是关键字不同,实现使用implements。
    其他类(实现类)实现接口后,就相当于声明:”我应该具备这个接口中的功能”。实现类仍然需要重写方法以实现具体的功能。
    格式:
    class 类 implements 接口 {
     重写接口中方法
    }
    在类实现接口后,该类就会将接口中的抽象方法继承过来,此时该类需要重写该抽象方法,完成具体的逻辑。
    接口中定义功能,当需要具有该功能时,可以让类实现该接口,只声明了应该具备该方法,是功能的声明。
    在具体实现类中重写方法,实现功能,是方法的具体实现。
    于是,通过以上两个动作将功能的声明与实现便分开了。(此时请重新思考:类是现实事物的描述,接口是功能的集合。)
    十、接口中成员的特点
    1、接口中可以定义变量,但是变量必须有固定的修饰符修饰,public static final 所以接口中的变量也称之为常量,其值不能改变。后面我们会讲解static与final关键字
    2、接口中可以定义方法,方法也有固定的修饰符,public abstract
    3、接口不可以创建对象。
    4、子类必须覆盖掉接口中所有的抽象方法后,子类才可以实例化。否则子类是一个抽象类。
    十一、接口和抽象类的区别:
    相同点:
    都位于继承的顶端,用于被其他类实现或继承;
    都不能直接实例化对象;
    都可以包含抽象方法,其子类都必须覆写这些抽象方法;
    区别:
    抽象类为部分方法提供实现,避免子类重复实现这些方法,提高代码重用性;接口只能包含抽象方法;
    一个类只能继承一个直接父类(可能是抽象类),却可以实现多个接口;(接口弥补了Java的单继承)
    抽象类是这个事物中应该具备的内容, 继承体系是一种 is..a关系
    接口是这个事物中的额外内容,继承体系是一种 like..a关系
    二者的选用:
    优先选用接口,尽量少用抽象类;
    需要定义子类的行为,又要为子类提供共性功能时才选用抽象类;多态

  • 相关阅读:
    Android Media Playback 中的MediaPlayer的用法及注意事项(二)
    Android Media Playback 中的MediaPlayer的用法及注意事项(一)
    34. Search for a Range
    33. Search in Rotated Sorted Array
    32. Longest Valid Parentheses
    31. Next Permutation下一个排列
    30. Substring with Concatenation of All Words找出串联所有词的子串
    29. Divide Two Integers
    28. Implement strStr()子串匹配
    27. Remove Element
  • 原文地址:https://www.cnblogs.com/nbkls/p/12511285.html
Copyright © 2011-2022 走看看