JAVA从小白到大牛(14)--------抽象类与接口

14.1 抽象类 

面向接口的编程

接口和抽象类其实是给框架设计者使用的

14.1.1 抽象类概念

JAVA从小白到大牛(14)--------抽象类与接口_第1张图片

 

有抽象方法的类必须是抽象类 abstrac

抽象方法没有 {} ,因为没有具体实现内容

JAVA从小白到大牛(14)--------抽象类与接口_第2张图片

 

在一个抽象类中,也可以没有抽象方法 (0~n)

JAVA从小白到大牛(14)--------抽象类与接口_第3张图片

 

抽象类中也可以有具体方法, 具体方法也可以调用抽象方法

JAVA从小白到大牛(14)--------抽象类与接口_第4张图片

 

抽象类不能实例化 !!!

可以当作一种类型,实例化它的子类,但是抽象类本身不能实例化

JAVA从小白到大牛(14)--------抽象类与接口_第5张图片

 

14.1.2 抽象类声明和实现

JAVA从小白到大牛(14)--------抽象类与接口_第6张图片

JAVA从小白到大牛(14)--------抽象类与接口_第7张图片

 

抽象类的子类要求 子类必须实现抽象方法

JAVA从小白到大牛(14)--------抽象类与接口_第8张图片

 

抽象类中可以有实例变量

JAVA从小白到大牛(14)--------抽象类与接口_第9张图片

 

 

 

14.2 使用接口

14.2.1 接口概念

接口比抽象类更抽象,接口中的所有方法都是抽象的

接口中不能有非静态的变量,

JAVA从小白到大牛(14)--------抽象类与接口_第10张图片

JAVA从小白到大牛(14)--------抽象类与接口_第11张图片

JAVA从小白到大牛(14)--------抽象类与接口_第12张图片

 

 

 

 

14.2.2 接口声明和实现

抽象类的子类要求 子类必须实现抽象方法

JAVA从小白到大牛(14)--------抽象类与接口_第13张图片

 

 

一个类实现多个接口

JAVA从小白到大牛(14)--------抽象类与接口_第14张图片

 

 

接口和抽象类一样,不能实例化

JAVA从小白到大牛(14)--------抽象类与接口_第15张图片

 

接口 中可以定义成员变量,但是只能是 public final static

 

14.2.3 接口与多继承

JAVA是单继承,只能有一个父类, 但可以实现多个接口,通过这种方式实现C++中的多继承

JAVA从小白到大牛(14)--------抽象类与接口_第16张图片

C++ 中,如果A,B两个父类,都有 methodB()方法,继承都就会发生冲突,

JAVA的接口机制避免了这种冲突,因为A,B接口里的方法,在子类里都需要overRide

 

14.2.4 接口继承

接口也可以继承接口,

JAVA从小白到大牛(14)--------抽象类与接口_第17张图片

 

JAVA从小白到大牛(14)--------抽象类与接口_第18张图片

JAVA从小白到大牛(14)--------抽象类与接口_第19张图片

 

JAVA从小白到大牛(14)--------抽象类与接口_第20张图片

 

 

14.2.5 Java8 新特性默认方法和静态方法

JAVA从小白到大牛(14)--------抽象类与接口_第21张图片

 

Java8之后 可以在接口中定义 默认方法和静态方法

JAVA从小白到大牛(14)--------抽象类与接口_第22张图片

默认方法 相当于Swift 和OC中的可选方法,可覆盖???

JAVA从小白到大牛(14)--------抽象类与接口_第23张图片

 

静态方法不能通过 实现类 来调用,必须通过 接口名 来调用

静态方法与具体实现类无关,只能通过接口调用

JAVA从小白到大牛(14)--------抽象类与接口_第24张图片JAVA从小白到大牛(14)--------抽象类与接口_第25张图片

 

 

 

 

14.3 抽象类与接口区别

构造方法的作用 就是初始化实例成员变量

 

                                        接口

抽象类
多继承 支持多继承 (包括普通类)只能继承一个父类
成员变量

不能有实例成员变量,

声明的成员变量全是静态常量(public static final)

与普通类一样,各种形式的成员变量都可以声明
构造方法 不含构造方法,由于没有实例成员变量 可以有实例成员变量,也需要构造方法
具体方法

Java8之前,只有抽象方法

Java8之后,也可以声明具体方法,具体方法通过声明默认方法实现

可声明抽象方法和具体方法

 

你可能感兴趣的:(JAVA编程基础)