如何彻底理解Java抽象类 为什么要用抽象类 什么情况下用抽象类
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了如何彻底理解Java抽象类 为什么要用抽象类 什么情况下用抽象类,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2160字,纯文字阅读大概需要4分钟。
内容图文
呐,到底什么是抽象类,有时明明一个普通类就可以解决了,为啥非得整个抽象类,装逼吗
我曾带着这样的疑惑,查了很多资料,看了很多源码,写了很多代码,以下是自家的理解
一、彻底理解Java抽象类
当我们无法理解一个事物的时候,我得追寻他的本源:万物皆对象
在面向对象的概念中,世间万物通过类来描绘的,但如果一个类中没有包含足够的信息来描绘一个具体的事物对象,这样的类就是抽象类。(参考 https://www.runoob.com/java/java-abstraction.html)
无论你在其他渠道看到过多少关于抽象类的解释,都没有这样解释合乎根本!
举个栗子
让你设计一个简单的学生选课系统
基本需求:学生选课,老师授课,每个老师只能接受有限个个学生,每个学生只能选一个老师。
最终会抽象出其中2个领域对象:学生、老师。当我们用类去描述学生、老师时,他们的共性是人(Person):有名字、年龄、职业等特征,有上课(学习、授课都属于上课)等行为;
呐,我们想想光有这些特性、行为,就能完整的描述出一个可在选课系统操作的对象(学生或老师)吗?显然不行!学生还需要:所选课程、选中的老师等其他特征,老师还需要:学生限数、名下学生等其他特征,加上这些东西,才能完整的描述一个可供操作的对象!
如下代码,Person类,作为抽象类,goToClass方法是子类必须重写的方法,表明子类是去学习的,还是上课的
public abstract class Person { protected String name; protected int age; protected int profession; public abstract void goToClass(); }
public class Student extends Person { private int selLesson; private int selTeacher; @Override public void goToClass() { System.out.println("go to studying"); } }
public class Teacher extends Person { private int studentNumLimit; private List<String> students; @Override public void goToClass() { System.out.println("give lessons"); } }
二、为什么要用抽象类 什么情况下用抽象类
1、根本原因:无法完整描述一个事物的类
2、抽象类有一个特征,其抽象方法,必须在子类重写(子类非抽象类),所以,当我们父类的方法,必须要子类重写实现时,用抽象类。如上面的 goToClass() 方法,学生、老师去课堂的目的完全不同,必须自己实现。
3、跟接口相比,接口的方法必须由实现类全部实现,接口方法比较多时,就会麻烦,而抽象类没有这样的限制。比如jdk 里面的 AbstractList,是ArrayList 的父类,里面全是方法,你只需要重写自己需要的
4、易于理解,有时候,这样的设计,让人更容易理解它的层级等。个人认为所有的设计原则都是死的,为了提高代码的实际可操性,牺牲部分设计原则是可以的
内容总结
以上是互联网集市为您收集整理的如何彻底理解Java抽象类 为什么要用抽象类 什么情况下用抽象类全部内容,希望文章能够帮你解决如何彻底理解Java抽象类 为什么要用抽象类 什么情况下用抽象类所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。