Java 抽象类和接口分析 菜鸟学习之旅

1.抽象类

抽象类用abstract来修饰,例如:

package com.test.abstractaaa;

public abstract class TestAbstract {

}

抽象类是用来捕捉子类的通用性的,它不能被实例化,只能用作子类的超类,抽象类是被用来创建继承层级里子类的模板。


通俗地去讲:
虽然可以使用两组对边分别平行的四边形和两条边相等的三角形分别定义平行四边形和等腰三角形。
但却不能使用具体的语言去定义图形
在Java中,把类似无法使用具体语言定义的图形类称为抽象类。
语法如下:

【权限修饰符】abstract class 类名{
类体
}

用abstract关键字定义的方法称为抽象方法语法如下:

【权限修饰符】abstract 方法返回值类型 方法名(参数列表);

抽象方法直接以分号结尾,没有方法体,所以其本身没有任何意义,除非被重写,而承载这个抽象方法的抽象类,必须被继承。
实际上,抽象类除了杯继承之外没有任何意义。
继承抽象类的所有子类都需重写抽象类的抽象方法。
!!注意:构造方法不能被定义为抽象方法。

接口

接口是抽象的延伸,可以将它看做纯粹的抽象类,所有接口的所有方法,都是没有方法体,可以将draw()方法封装到一个接口中,这样可以让一个类既能继承图像类,又能实现draw()接口方法,这就是接口存在的必要性。
【修饰符】interface 接口名 【extends 父接口名列表】{
【public】【static】【final】常量;
【public】【abstract】方法;
}

两者的区别:

1,接口的存在也是为了弥补类无法多继承的缺点,假设一个情况
父类--Animal
子类--Dog、Cat 、People、Sheep、Tiger、Lion。
假设在 Animal 中都存在 eat()这个公有的方法。
但是 Tiger 和 Lion 、People 还拥有 Hunt 的方法,但是hunt 不存在在 Dog / Cat中,
所以需要对 Tiger Lion People 上面新建一个 接口。用于特定标识他们公有的。
(详细见大佬博客:https://blog.csdn.net/whandwho/article/details/80247521?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164732604616780255280827%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=164732604616780255280827&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduend~default-1-80247521.142v2pc_search_result_control_group,143v4control&utm_term=java%E6%8E%A5%E5%8F%A3%E7%9A%84%E7%90%86%E8%A7%A3&spm=1018.2226.3001.4187)

抽象类和接口都包含可以由子类继承实现的成员,
但抽象类是对根源的抽象,而接口,是对动作的抽象,抽象类和接口的区别。

posted @ 2022-03-14 21:31  B1smarck  阅读(39)  评论(0编辑  收藏  举报