抽象类和接口
抽象类
在Java中采用abstract 关键字定义的类就是抽象类,采用abstract关键字定义的方法就是抽象方法
抽象的方法只需在抽象类中,提供声明,不需要实现
如果一个类中包含抽象方法,那么这个类必须定义成抽象类
如果这个类是抽象的,那么这个类被子类继承,抽象方法必须被重写。如果在子类不重写该抽象方法,那么必须将此类再次声明为抽象类
抽象类不能被实例化
抽象类不能被final修饰
被final修饰的类不能被继承,而抽象方法只能被子类实现抽象类中可以包含方法实现,可以将一些公共的代码放到抽象类中,另外在抽象类中可以定义一些抽象的方法,这样就会存在一个约束,而子类必须实现我们定义的方法
接口
接口我们可以看作是抽象类的一种特殊情况,在接口中只能定义抽象的方法和常量(完全抽象)
接口的方法默认是 public abstract的,不能更改
接口中的变量默认都是public static final,不能被更改,所以必须显示初始化
注: 接口中的所有数据都是public 修饰的
接口不能被实例化,接口中没有构造函数的概念
接口之间可以继承,但是接口之间不能实现
类和类之间的关系有单继承关系,那么类和接口之间的关系被称为实现关系。
注:实现可以等同看作继承,实现对应的关键字是:implements,不是 extends
接口中的方法只能通过类来实现,通过 implements 关键字
一个类可以实现多个接口,用“,”隔开
如果一个非抽象的类实现了接口,那么接口中所有的方法必须实现
一类可以实现多个接口,接口和接口之间支持也是多继承的
java 中的规范:一个类若实现了一个接口,该类的名字一般写成:接口名 Impl
接口和抽象类的区别:
-
接口描述了方法的特征,不给出实现,一方面解决 java 的单继承问题,实现了强大的可接插性
-
抽象类提供了部分实现,抽象类是不能实例化的,抽象类的存在主要是可以把公共的代码移植到抽象类中
-
面向接口编程,而不要面向具体编程(面向抽象编程,而不要面向具体编程)
-
优先选择接口(因为继承抽象类后,此类将无法再继承,所以会丧失此类的灵活性)

浙公网安备 33010602011771号