一,抽象类
- 抽象方法用abstract修饰
- 抽象方法没有任何执行语句
- 因为无法执行抽象方法,抽象方法的类也必须申明为抽象类
- 无法实例化一个抽象类,可以实例化其非抽象子类
- 抽象类用于被继承
- 抽象类可以强迫子类实现其定义的抽象方法,抽象方法相当于定义了规范
- 抽象类中可以有非抽象方法
- 抽象类中的成员可以是 private、默认、protected、public
- 抽象类中可以定义构造器
二,接口
接口定义:Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。
为什么使用接口:
1. 减少代码的书写(上边分析的代码重载)
2. 提高了代码的可维护性和扩展性。
3. 在团队合作中,代码的规范性
如果一个抽象类没有字段,所有方法全部都是抽象方法,就可以把该抽象类改为接口。
注意事项:
- 接口定义的方法默认是public abstract(可以在定义时不写)
- interface可以继承自另一个interface,继承时使用extends
- 接口可以定义default方法(JDK1.8后特型)
- 接口中定义的成员变量实际上都是常量
- 接口中不能有静态方法
三,抽象方法
抽象方法不能被标记为static, native, synchronized。
抽象方法需要子类重写,而静态的方法是无法被重写的,因此二者是矛盾的。本地方法是由本地代码(如 C 代码)实现的方法,而抽象方法是没有实现的,也是矛盾的。synchronized 和方法的实现细节有关,抽象方法不涉及实现细节,因此也是相互矛盾的。
四,面试题
问题:接口是否可继承接口?抽象类是否可实现(implements)接口?抽象类是否可继承具体类(concreteclass)?抽象类中是否可以有静态的main方法?
答案:都是可以的