Java三大特性——继承

继承

正文

继承是一个is..a的关系,比如:猫是一种动物,那么在java中可以设定猫这个类是可以继承动物类。那一个类只能被一个类继承吗?不是的,比如狗,鸟类都是可以继承动物类。然后在动物类中加上公共的属性,这样,不同的子类就可以进行复用,提高了代码的利用率。不过Java中规定,一个类只能继承一个父类。
在子类继承了父类后,子类可以扩展自己的特有成员属性和方法,比如,鸟的特有方法:fly();所以,继承中对于子类的扩展是很方便的。
总结来说,可以有以下三点:
1、子类拥有父类非private的属性和方法。
2、子类可以拥有自己属性和方法,即子类可以对父类进行扩展。
3、子类可以用自己的方式实现父类的方法。

继承的相关问题思考

接下来,我们通过对一些问题的思考,进一步来认识继承。
A:子类拥有父类非private的属性和方法,那么我们在项目中entity的公共字段是怎么获取?


1.1、继承Demo

最直接的原因,是因为父类的getPhid是public修饰的,但是为什么别的类的实例不能获取到这个phid?因为有封装的存在,所以,继承其实是破坏了封装。
通过1.2图可以看到,子类相当于一辆车,而父类相当于子类的引擎(是不是感觉和内部类有点类似了,它们之间的差别可以自行了解)。其中,通过super和this分别表示父类引用和本实例引用,这个可以处理父类子类具有相同成员属性的问题。


1.2、子类和父类的内存模型

B:向上转型是What?
向上转型:就是你 new 一个子类,但是用一个父类的引用接收;比如说图1.3中的鸟和动物。为什么会允许这种行为了,因为这相当于是图1.2右边中,父类的框框外的东西不要(除了子类重写的方法),不过它还是完整的,安全的。

1.3、向上引用的对象设置父类成员属性

C:继承可以复用代码,方便扩展,那是否可以大肆使用?
没有任何东西是完美的,继承也是:
1、它会把父类和子类进行强耦合,如果父类发生变化,子类也没得办法,要发生变化(比如OverRide);
2、它会破坏封装,子类可以知道父类的实现细节,毕竟要先初始化父类;
在《Thinking in java》中有提到一个继承的使用情况:问一问自己是否需要从子类向父类进行向上转型。如果必须向上转型,则继承是必要的,但是如果不需要,则应当好好考虑自己是否需要继承。
时光荏苒,我们一同进步。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容