抽象类
什么是抽象类? 类和类之间有共同特征,将这些具有共同特征的类再进一步抽象形成抽象类。由于类本身是不存在的,所以抽象类无法创建类。抽象类和抽象类之间实际上可能还会有共同特征,还可以再进一步抽象。 抽象类的类型:引用数据类型 语法:
[ 修饰符列表] abstract class 类名{ 类体;}
抽象类无法实例化也无法创建对象,所以抽象类是用来被子类继承的,final和abstract不能同时使用。 抽象类的子类也可以是抽象类 抽象类虽然无法实例化,但也有构造方法可供子类使用 抽象类关联到一个概念:抽象方法 抽象方法表示没有实现的方法,没有方法体的方法。 例如:public abstract void doSome(); 抽象方法特点: ①没有方法体,以分号结尾 ②前面修饰符列表中有abstract关键字 抽象类中不一定有抽象方法,抽象方法必须在抽象类中 重要结论:一个非抽象类继承抽象类后,必须将抽象类中的抽象方法实现(即重写或覆盖)
接口
接口也是一种引用数据类型,编译之后也是一个class字节码文件 接口是完全抽象的(抽象类型是半抽象)或者说接口是特殊的抽象类,类和接口之间叫实现。 语法
[ 修饰符列表] interface class 接口名{ }
接口支持多继承,一个接口可以继承多个接口 接口中只包含两个部分内容:常量和抽象方法 接口中的所有元素都是public修饰的,接口中的抽象方法定义时:public abstract修饰符可以省略 接口中的方法都是抽象方法,都没有方法体 接口中的常量的public abstract修饰符可以省略 实现使用implement关键字完成 当一个非抽象类实现接口的话必须将接口中所有的抽象方法全部实现(覆盖、重写) 接口中的方法都是public 接口和接口之间支持多继承。一个类可以同时实现多个接口,这种机制弥补了java中类和类只支持单继承的缺席 继承和实现都存在的话代码应如何写? extends关键字在前,implement关键字在后 使用接口写代码的时候,可以使用多态(父类型引用指向子类型对象) 接口在开发中的作用: 注意! 接口在开发中的作用类似于多态在开发中的作用 面向接口编程可以降低程序的耦合度,提高程序的扩展力,符合OCP开发原则(即开闭原则)。 接口的使用离不开多态机制(接口+多态才可以达到降低耦合度) 接口可以将调用者和实现者解耦合,调用者面向接口调用,实现者面向接口实现 类和类之间的关系 is a(继承) has a(关联) like a(实现) 抽象类和接口有什么区别?(从语法上来说) ①抽象类是半抽象的,接口是完全抽象的 ②抽象类中有构造方法,接口中没有构造方法 ③接口和接口之间支持多继承,类和类之间只能单继承 ④一个类可以同时实现多个接口,一个抽象类只能继承一个类(单继承) ⑤接口中只允许出现常量和抽象方法 ⑥以后接口使用得比抽象类多,接口一般是对“行为”的抽象