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

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

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

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