面向接口的编程
接口和抽象类其实是给框架设计者使用的
14.1.1 抽象类概念
有抽象方法的类必须是抽象类 abstrac
抽象方法没有 {} ,因为没有具体实现内容
在一个抽象类中,也可以没有抽象方法 (0~n)
抽象类中也可以有具体方法, 具体方法也可以调用抽象方法
抽象类不能实例化 !!!
可以当作一种类型,实例化它的子类,但是抽象类本身不能实例化
14.1.2 抽象类声明和实现
抽象类的子类要求 子类必须实现抽象方法
抽象类中可以有实例变量
14.2.1 接口概念
接口比抽象类更抽象,接口中的所有方法都是抽象的
接口中不能有非静态的变量,
14.2.2 接口声明和实现
抽象类的子类要求 子类必须实现抽象方法
一个类实现多个接口
接口和抽象类一样,不能实例化
接口 中可以定义成员变量,但是只能是 public final static
14.2.3 接口与多继承
JAVA是单继承,只能有一个父类, 但可以实现多个接口,通过这种方式实现C++中的多继承
C++ 中,如果A,B两个父类,都有 methodB()方法,继承都就会发生冲突,
JAVA的接口机制避免了这种冲突,因为A,B接口里的方法,在子类里都需要overRide
14.2.4 接口继承
接口也可以继承接口,
14.2.5 Java8 新特性默认方法和静态方法
Java8之后 可以在接口中定义 默认方法和静态方法
默认方法 相当于Swift 和OC中的可选方法,可覆盖???
静态方法不能通过 实现类 来调用,必须通过 接口名 来调用
静态方法与具体实现类无关,只能通过接口调用
构造方法的作用 就是初始化实例成员变量
接口
抽象类多继承支持多继承(包括普通类)只能继承一个父类成员变量不能有实例成员变量,
声明的成员变量全是静态常量(public static final)
与普通类一样,各种形式的成员变量都可以声明构造方法不含构造方法,由于没有实例成员变量可以有实例成员变量,也需要构造方法具体方法Java8之前,只有抽象方法
Java8之后,也可以声明具体方法,具体方法通过声明默认方法实现
可声明抽象方法和具体方法