理解 JAVA 抽象类和接口

理解 JAVA 抽象类和接口

最近刷力扣犯懒想写一个大项目里面放每道题的解答,遇到了很多语法方面的知识,理解后遂写成博客。笔者也是初学者,文章难免存在问题和稚嫩的地方。敬请各位斧正(抱拳)。

一、什么是抽象类和接口

1. 抽象类

抽象类是 JAVA 中的一个基本概念。简单来说就是用 abstract 关键字修饰,可以有构造函数但不能被实例化,可以有抽象函数也可以有实体函数的类。

抽象类用于描述“是什么”的关系,是一种 is-a 关系。它被用来定义一组具有共同特征的对象,并且可以包含实现共用的部分代码。

(以前看别人博客遇到这种不讲基本概念的我都会骂一句,现在自己写了发现也不想写基本概念Orz)

2. 接口

接口同样是 JAVA 中的基本概念,与抽象类不同,接口不使用 class 关键字声明,而使用 interface 声明。

接口不能拥有构造函数(自然也不能被实例化),也不能拥有实体函数。

接口用于描述“能做什么”的关系,是一种 can-do 关系。它定义了一组动作或能力,而不关心谁实现这些动作。接口更注重行为的抽象。

二、有什么用

尽管抽象类和接口最重要的作用都是描述语义,对代码复用的贡献较小(甚至从代码复用的角度看,接口还需要白白写一个文件)。但二者在多态中都能起到重要作用。

什么?你说实体类也可以?那我只好搬出语义了。

二、区别是什么

1. 抽象类和接口

抽象类是 class ,可以定义方法实现,看似比像个目录一样的接口高级多了,好像没什么可比性。

但在“继承”和多态中可以看出,二者是非常相似的。

抽象类定义了继承者的“性质”,而接口定义了实现者的“功能”。

继承者的“本质”在语义上可以独立存在,拥有实例化的能力(但不一定拥有实例化的价值),因此抽象类可以拥有构造函数和其他实体方法。与此同时,由于任何一个实例的本着明确且单一,抽象类才被设计为类,只允许单继承。

相反,继承者的“功能”不存在独立存在的语义,也不具备实例化的能力,他更像是一个模板,规定了他的实现者有某些方面的功能,却不指定功能的细节。因此接口没有构造函数和任何实体方法。同时,一个实例可以包含多种多样的特性(比如同时可以移动也可以比较大小),因此接口允许“多继承”。

抽象类和接口更像是在分管一个实例的“本质”和“特性”,而“本质”和“特性”的区别决定了抽象类和接口的区别。

实际应用示例

抽象类: 假设你在设计一个动物园管理系统,需要描述各种动物:

public abstract class Animal {
 public abstract void makeSound(); // 每种动物发出不同的声音
 public void sleep() {
     System.out.println("This animal is sleeping.");
 }
}

public class Dog extends Animal {
 @Override
 public void makeSound() {
     System.out.println("Woof!");
 }
}

接口: 假设你需要让一些动物具备飞行的能力,可以定义一个Flyable接口:

public interface Flyable {
 void fly();
}

public class Bird extends Animal implements Flyable {
 @Override
 public void makeSound() {
     System.out.println("Chirp!");
 }

 @Override
 public void fly() {
     System.out.println("This bird is flying.");
 }
}

在这个例子中,Bird类同时继承了Animal抽象类(因为鸟是一种动物),并实现了Flyable接口(因为鸟会飞)。

2. 抽象类和实体类

关于子类“本质”的提取,其实抽象类和实体类都可以完成。二者的选用基本取决于语义

如果系统中父类足够抽象以至于不能或没有意义以实例的形式出现,那就适合使用抽象类来描述,这样能够能清晰的描述类的设计结构。

而如果系统中的父类不足够抽象,父类以实例的形式出现对系统有一些作用,那就更适合用实体类来定义父类,这样一般更加有利于代码复用。

实际应用实例

实体父类:假设你在设计一个动物园管理系统,需要统计动物的数量。你可以用实体类来定义 Animal

抽象父类:假设你在设计一个动物园管理系统,需要统计饲料的数量。这时适合用抽象类来定义 Animal 。因为饲料至少要区分食草动物和食肉动物, Animal 这一概念不再具有实例化的意义。

以下是VMware Workstation 17.0虚拟机安装教程1. **下载VMware Workstation 17.0** - 访问VMware官方网站,下载VMware Workstation 17.0的安装包。 2. **启动安装程序** - 下载完成后,双击安装包启动安装程序。 3. **接受许可协议** - 在安装向导中,阅读并接受许可协议,然后点击“下一步”。 4. **选择安装路径** - 选择安装路径,默认路径通常在C盘。可以根据需要更改安装路径,然后点击“下一步”。 5. **自定义安装** - 在自定义安装界面,可以选择要安装的组件。通常保持默认设置即可,然后点击“下一步”。 6. **用户体验设置** - 选择是否参与用户体验改进计划,根据个人意愿选择,然后点击“下一步”。 7. **快捷方式创建** - 选择是否在桌面和开始菜单创建快捷方式,然后点击“下一步”。 8. **准备安装** - 确认所有设置无误后,点击“安装”按钮开始安装。 9. **完成安装** - 安装完成后,点击“完成”按钮结束安装。 10. **启动VMware Workstation 17.0** - 安装完成后,启动VMware Workstation 17.011. **创建新虚拟机** - 在VMware Workstation中,点击“创建新的虚拟机”。 12. **选择虚拟机配置** - 选择“典型”配置,点击“下一步”。 13. **选择安装来源** - 选择安装来源,可以是光盘、ISO镜像文件等,然后点击“下一步”。 14. **输入操作系统信息** - 输入操作系统的信息,如操作系统类型和版本,然后点击“下一步”。 15. **命名虚拟机** - 为虚拟机命名并选择存储位置,然后点击“下一步”。 16. **指定磁盘容量** - 指定虚拟机磁盘的容量,可以选择“将虚拟磁盘存储为单个文件”或“将虚拟磁盘拆分成多个文件”,然后点击“下一步”。 17. **完成创建** - 确认所有设置无误后,点击“完成”按钮。 18. **启动虚拟机** - 在VMware Workstation中,选择刚创建的虚拟机,点击“启动”按钮。 19. **安装操作系统** - 按照提示完成操作系统的安装。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值