抽象类与接口(学习笔记)
抽象类 什么是抽象类: 类和类之间具有共同特征,讲这些共同特征抽取出来,就形成了抽象类。因为类本身是不存在的,所以抽象类无法创建对象(无法实例化)。 以下借用视频中总结的思维层次图: 抽象类属于什么类型: 抽象类也属于引用数据类型,跟普通的类一样。 如何定义一个抽象类: 语法: [修饰符列表] abstract class 类名{ 类体; } 抽象类是无法实例化的,天生是用来被继承的,天生当爹。 但是抽象类的子类也可以是抽象类。 因为抽象类是天生就用来被继承的,而final修饰的类是无法被继承的,所以final和abstract无法联合使用。 抽象类是有构造方法的。 子类继承了抽象类之 【抽象类】 抽象类是面向对象编程中的一个重要概念,它是对一类对象的共同特性进行抽象的产物。在Java中,当我们发现多个类之间存在共性,为了减少代码重复和提高代码复用,我们可以抽取出这些共性形成一个抽象类。抽象类不能直接创建实例,因为它代表的是一个类别,而不是具体存在的实体。定义抽象类的语法如下: ```java [修饰符列表] abstract class 类名 { 类体; } ``` 这里的修饰符列表可以包括访问修饰符(如public、protected、private)、final(不可用于抽象类)等。抽象类可以包含抽象方法(无方法体的方法)和非抽象方法。抽象方法必须由其子类来实现,这体现了面向抽象编程的思想,有助于降低程序的耦合度,增强可扩展性。 【抽象方法】 抽象方法没有方法体,仅由方法签名(返回类型、方法名和参数列表)构成,以分号结尾。它必须在类声明中使用`abstract`关键字标识。如果一个类包含至少一个抽象方法,那么该类必须被声明为抽象类。非抽象子类继承抽象类时,必须实现所有的抽象方法,除非它自己也是抽象类。 【接口】 接口是一种完全抽象的类型,它更专注于定义行为,而不是实现。在Java中,接口可以看作是特殊类型的抽象类,它只包含常量和抽象方法,且所有元素默认为public。定义接口的语法如下: ```java [修饰符列表] interface 接口名 { // 常量和抽象方法 } ``` 接口支持多继承,即一个接口可以继承多个其他接口。接口中的抽象方法默认为public abstract,常量默认为public static final,因此这两个修饰符可以省略。接口与类之间的关系称为“实现”,使用`implements`关键字。当一个类实现接口时,它必须实现接口中的所有抽象方法。一个类可以同时实现多个接口,以实现多重功能。 【接口与抽象类的区别】 1. 抽象类是部分抽象的,可以包含非抽象方法,而接口完全是抽象的,只允许常量和抽象方法。 2. 抽象类可以有构造方法,而接口没有构造方法。 3. 类可以继承一个抽象类(单继承),但接口支持多继承,一个类可以实现多个接口。 4. 实现接口时,所有接口中的方法必须在实现类中实现,而继承抽象类时,只有抽象方法需要实现。 【面向接口编程】 面向接口编程是设计模式和良好编程实践的重要原则,它强调将具体的实现细节与高层逻辑分离。通过使用接口,我们可以定义一套规范,让不同的实现类遵循这些规范,从而降低系统组件间的依赖,提高代码的灵活性和可扩展性。例如,厨师、菜单和顾客的例子中,菜单作为接口,定义了菜品制作的规范,厨师作为实现类,顾客作为调用类,它们之间的交互通过接口完成,降低了它们之间的耦合度。