抽象类和接口
抽象类和接口
1.抽象类
1.定义:
类与类之间有共同特征,将这些具有共同特征的类在进一步抽象形成抽象类。由于类本身是不存在的,所以抽象类无法创建对象。(只有声明,没有方法体内容)
2.抽象类属于引用数据类型
3.语法:
【修饰符列表】 abstract class 类名{
类体
}
4.抽象类无法进行进行实例化,无法创建对象,所以抽象类是用来被子类继承的
5.final和abstract不能联合使用,这两个关键字是对立的。
6.抽象类的子类可以是抽象类。
7.抽象类虽然无法实例化,但是可以具有构造方法,这个构造方法是供子类使用的
8.抽象方法语法:【修饰符列表】 abstract 返回值类型 方法名称{};
特点:1.没有方法体,以分号结尾;2.前面修饰符列表中有abstract关键字
9.抽象类中不一定有抽象方法(可以有非抽象方法),但是抽象方法一定在抽象类中。
非抽象类继承抽象类:
- 非抽象类继承抽象类,必须对抽象方法进行重写。因为抽象方法只能存在于抽象方法中。
- 抽象类继承抽象类,是不需要重写的
- 面向抽象编程!!!
2.接口
接口:
- 接口也是一种引用数据类型。
- 接口是抽象类的一种。接口是完全抽象的。抽象类是半抽象的(抽象类中能够编写非抽象方法)
- 语法:interface 接口名;
- 接口支持多继承,一个接口可以继承多个接口
- 接口中只包含两部分内容:变量和抽象方法。接口没有其他内容。
- 接口中的所有元素都是public修饰的
- public abstract修饰符可以省略。
- 接口中的方法都是抽象方法。
- 接口中的public static final可以省略。
- 使用implements 类名。
接口被实现:
- 使用implements
- 一个接口被非抽象类实现,必须对所有的抽象方法都进行实现。
- 实现的方法必须是public的,因为重写权限不能变低。
接口在开发中的作用:
注意:接口在开发中的作用,类似于多态在开发中的作用
多态:面向抽象编程,不面向具体编程。降低程序耦合性,提高程序扩展力。
接口的作用:
因为类只能继承一个类,所以我们可以通过接口进行实现来实现多继承方式。面向接口调用,
面向接口编程,可以降低程序的耦合性,提高程序的扩展力。符合OCP开发原则。接口的使用离不开多态机制(接口+多态才可以达到降低耦合度。)
接口可以解调用者和实现者耦合,任何一个接口都有调用者和实现者。调用者面向接口调用,实现者面向接口实现。
接口类型 对象名 = new 实现者();
- 通过接口可以实现不相关类的相同行为,而不需要了解对象所对应的类。
- 通过接口可以指明多个类需要实现的方法。
- 通过接口可以了解对象的交互界面,而不需了解对象所对应的类
接口的意义:
接口会出现,最关键的原因应该是Java中向上转型的出现,因为向上转型,子类中一些父类中不存在的方法(或者说不共用的方法)便不能继续调用了。这样就很麻烦,我们需要子类中的方法,但是这下该怎么办呢?
第一种在父类中加子类的方法。但是,这个方法在父类中其实真的没有必要,方法函数体都不需要。所以会用抽象方法,这样就有了抽象方法的诞生。可是就算这样了,问题还是没有解决,因为真的太麻烦了,如果有其他的子类要继承父类,也难免会有向上转型的时候,那么,这个时候难道要一直往父类中加抽象方法么?显然不合理!
于是就有了第二种方法,接口便诞生了,这也解释了为什么接口中都是抽象的方法!所以有了接口,子类中需要的方法,但是父类中没有的方法可以直接用接口来完成,也就不用再修改父类的方法,在多人合作完成一项工程的时候也更加的方便。
抽象类和接口的区别
区别点 | 抽象类 | 接口 |
---|---|---|
定义组成 | 包含抽象方法的类 具体方法 变量 构造方法 | 抽象方法和常量 |
使用 | 子类继承抽象类 | 实现类实现接口 |
关系 | 抽象类实现接口 | 接口不能继承抽象类,可以继承多个接口 |
对象 | 通过抽象类的多态性产生实例对象 | 无 |
局限 | 只能单继承 | 没有 |
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术