抽象类,接口,类、接口关系,抽象类与接口的区别
1、抽象类
抽象方法:只有方法体的方法,用于定义抽象的、非具体的功能,如 abstract void eat(); 。
抽象类:abstract class,可以包含抽象方法的类(抽象类不一定包含抽象方法,包含抽象方法的类一定是抽象类),如:abstract class Animal{} 。
抽象类的特点:抽象类既可以包含抽象方法,也可以包含非抽象方法。
抽象类有构造函数,但不能被实例化。构造函数用于子类访问父类数据的初始化。
抽象类的子类是抽象类,该子类不需要重写抽象方法。
抽象类的子类是非抽象类,该子类必须重写全部抽象方法(实例化)。
1 abstract class Animal{ 2 public abstract void sleep(); 3 } 4 5 class Cat extends Animal{ 6 public void sleep(){ 7 System.out.println("小猫睡觉"); 8 } 9 } 10 11 class Fin{ 12 public static void main(String[] args){ 13 Animal ani=new Cat(); 14 ani.sleep(); 15 } 16 }
注意事项:抽象类与 private、final 关键字冲突,static 关键字无意义。
2、接口
接口:interface,用于定义方法而不实现方法的引用类型(其他的类和接口可以实现接口),如:interface ITrain{} 。
接口的特点:接口的实现用 implement 关键字,如:class ITrainImpl implement ITrain{} 。
接口是抽象的不能实例化。通过子类实例化。
接口的子类可以是抽象类,但是抽象类实现接口无意义。
接口的子类是非抽象类,该子类必须重写全部抽象方法(实例化)。
接口中只能包含抽象方法,不能包含非抽象方法,默认修饰符public。
接口中的变量,默认是常量。
接口没有构造函数。
注意事项:类实现接口的本质是:类 extends Object implement 接口{} 。
Object类,是所有类层次结构的根类,所有类都使用Object类作为超类,是所有对象(包扩数组)都实现这个类的方法。
3、类、接口关系
类与类的关系:继承关系,只能单继承,可以多层继承。
接口与接口的关系:实现关系,可以多实现,可以多层实现。
类与接口的关系:继承关系,可以多继承,可以多层继承。
4、抽象类与接口的区别
成员区别:抽象类,常量、抽象方法、变量、非抽象方法,有构造函数。
接口,常量、抽象方法,没有构造函数。
关系区别:抽象类,类只能单继承
接口,接口可以多继承/实现
理念区别:抽象类,被继承体现的是抽象出的共性的关系,如:猫(类)是动物(抽象类)。
接口,被实现的是扩展出的扩展功能,如:猫(类)会卖萌(接口)。