概念
继承是Java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。
继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
继承是面向对象的三大特征之一。继承和现实生活中的“继承”的相似之处是保留一些父辈的特性,从而减少代码冗余,提高程序行效率。
extend关键字
extend本意为”扩展“------> 子类extend父类,描述的是子类在父类基础上进行拓展。
//classA为父类,classB为子类
class A {
}
class B extends A {
}
class C extends B{
}
/*当出现classC类,此时classA称为超类或基类,classB类和classC类都是它的派生类*/
/*画图表示关系:classA <--- classB <--- classC【箭头永远指向父类】*/
注意:不是只要分析出具备相同属性行为,我们就做继承,必须具备类与类之间有is-a关系,我们才会去做继承
单继承
Java中的继承是单继承【在 Java 中,类的继承是单一继承,也就是说,一个子类只能拥有一个父类,所以 extends 只能继承一个类。】
单继承和多继承的优缺
多继承 优:丰富度的增加,子类既有来自父类A的内容,也有来自于父类B的内容,甚至还有父类
缺:会带来关系复杂度的问题。比如在结构上多继承不可能避免的都会出现网状结构
单继承 优:没有关系复杂度的问题,类与类之间只能形成层次结构清晰的树形图
缺:丰富度会减少
继承细节
父类的哪些内容会被继承
1、父类中的属性会被继承;就算是私有属性也会被继承,只是不能被看到而已.
【访问修饰符控制的是是否能够被直接看到操作到,而不是是否能被继承】
2、父类中的行为也会被继承,与属性是一样的道理。
3、父类的构造方法是不能被子类继承的。
【原因:1、构造方法的名字必须和类名保持一致;{父类的构造方法是父类类名,子类的构造方法是子类类名}。如果构造方法能被继承,那么说名字类里面有一个构造方法,但名字是父类,很明显语法不允许 2、构造方法的作用是产生对象;{父类构造方法产生父类对象,子类构造方法产生子类对象}。如果子类通过继承拥有了父类的构造方法,那么说明子类拥有一个产生父类的方法,伦理不允许】
继承的内存模型
JVM是采用一种或叫做”内存叠加“的方式,来实现继承关系。
当我们产生一个子类对象的时候,JVM是分两步走的: