目录
前言
在Java三大基本特征中,封装将很多零散的数据抽取到一个类当中。好处是在使用时不必面对零散的数据,而是一整个对象。
当对象多了之后,会有很多冗余数据。为了解决这个问题,我们把同一个事物中共性的变量和方法抽取到父类中,从而提高了代码的复用性。这样,在子类中可以直接调用父类中非私有的成员,这就是继承。
每一个子类中,行为往往是不同的。比如,老师的工作是教书,学生的工作是学习。java中虽然提供了重写功能。如果其他人在子类中忘记了重写,那么结果将会十分麻烦。
抽象方法就是专门为了此而存在的,当抽取共性时,不确定方法体,就把方法定义为抽象的。用public abstract 返回值类型 方法名(参数列表);表示。在子类中抽象方法必须重写,否则就会报错。而抽象方法所在的类就是抽象类。
抽象类和抽象方法(Abstract)
一、什么是抽象类和抽象方法
首先看一段关于抽象类和抽象方法的定义
抽象方法:将共性的行为(方法)抽取到父类之后,由于每一个子类执行的内容是不 样的,在父类中不能确定具体的方法体。那么,该方法就可以定义为抽象方法。
抽象类:如果一个类中有抽象方法,那么这个类必须声明为抽象类。
二、抽象类和抽象方法的定义格式
抽象方法:
public abstract 返回值类型 方法名(参数列表);
抽象类:
public abstract 类名{}
三、抽象类和抽象方法的注意事项
- 抽象类不能实例化
- 有抽象方法的类必须声明为抽象类
- 抽象类中可以没有抽象方法,但只要存在抽象方法,那么此类一定是抽象类
- 抽象类可以有构造方法,以便于其子类的创建
四、抽象类的继承
抽象类的子类
- 要么重写抽象类中的所有抽象方法(常用)
- 要么该类也是抽象类
总结
在我看来,抽象类和抽象方法,实际上是为了便于开发。一个项目通常是多个人完成的,每个人对于相同行为的理解是不一样的。
例如:对于吃饭这个行为,一些人认为就是eat(),定义方法可能是 public void eat(){};另一些人认为,吃饭是正在进行一个行为,并且返回一个结果,定义方法可能是 public boolean eatting(){ return true; }
这些观念的不同,可能会使我们在调用方法时产生一些麻烦。而抽象类和抽象方法,是直接固化一个格式,使该类所有的子类必须按照这个格式来定义、使用方法,从而使开发更加规范,整洁。
作者的话
在这么长时间的学习中,我认为闭门造车是效率最低的方法。在看了很多大佬的视频和文章后,我也试着开始做自己的博客,复盘总结每个知识点,或许这个方法会给我带来许多意想不到的收获。
同样这也是我的第一篇博客,有很多表达不清楚的地方。也希望各位看官老爷在评论区指正,提前感谢各位老爷!!!!