继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为(概念是网上抄的,可以不看),Java中用extends关键字表示继承。
成都创新互联公司主营鹤山网站建设的网络公司,主营网站建设方案,重庆APP软件开发,鹤山h5微信小程序开发搭建,鹤山网站营销推广欢迎鹤山等地区企业咨询通俗解释:Fig.1 简单的继承关系
Tips:子类不仅继承了父类的方法,而且还继承了父类的实例变量。
子类继承的实例变量实际上是对父类中实例变量的拷贝,在子类中修改实例变量的值,只会改变子类中该实例变量的值,并不会影响父类中的实例变量。
//结果就是:class B的instanceVariable的值变为100,而A和C的instanceVariable的值仍然为1。
public class myTest{
public static void main(String[] args){
B b = new B();
b.instanceVariable = 100;
}
}
class A{
public int instanceVariable = 1;
public void sonMethod(){};
}
class B extends A{
public void sonMethod(){};
}
class C extends A{
public void sonMethod(){};
}
二、深入理解
继承是将多个子类的共同属性抽象出来,组成父类。父类是较为抽象的类,而子类是较为具体的类。以动物为例子,见Fig.2,动物都有叫(makeNoise)、吃(eat)、睡觉(sleep)和散步(roam)的行为(方法),因此将其抽象出来作为父类。
Fig.2 动物的继承关系
However!虽然动物都可以叫(makeNoise),但是他们的叫声并不相同,猫是喵呜喵呜的叫,狗是汪汪的叫,河马是......我也不知道它怎么叫。因此出现了方法的重写(override),即子类不仅能继承父类,但能在父类的基础上做拓展和改进(儿子不仅继承了父亲的财富,还在父亲的基础上变的更有钱)。
tips:继承下来的方法可以被覆盖掉,但是实例变量不可以被覆盖。
三、方法的重写(override)是什么?子类可以根据需要,定义属于自己的行为。既沿袭了父类的功能和名称。又根据子类的需要重新实现父类方法,从而进行拓展和增强。
通俗的讲,就是在子类中如果创建了一个与父类相同名称、相同返回值类型、相同参数列表的方法(即和父类中的方法一模一样),只是方法体中的实现不同,以实现不同于父类的功能。当父类中的方法无法满足子类需求或子类具有特有功能的时候,需要方法重写。
但是重写(override)有以下的限制:
Tips: 什么是方法的重载(overload)?
方法的重载是指两个方法的名称相同,但参数不同。(它与继承or多态没有关系)
这一点不用担心,当调用对象的方法时,JVM会首先从最低阶的开始找起,从下往上,一直找到为止,如Fig.3所示。
Fig.3 对象引用哪个方法
五、怎么判断继承设计的合理与否?有一个简单的判断方法——“IS-A”测试,这是一个判断思想。例如:三角形是is a多边形;外科医生is a医生等等。需要注意,“IS-A”测试是单向的!例如,多边形is a三角形,就是错的。
如果继承层次树设计的合理,那么所有的子类都会通过任意一个上层父类的IS-A测试。例如:B是C的父类,而A又是B的父类,那么C也应该能通过is a A的测试。
六、子类中,先使用父类的方法,再加上额外的功能还是以上述中的动物类为例,如果我们想使用父类的roam()方法,但同时又想再额外加上我们自己的roam()方法,这时就要使用关键字super。
public void roam(){
super.roam();
//下面是my own roam()
......
......
}
这样会先执行父类的roam()方法,然后再执行下面的my own roam()方法。
七、继承的意义你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧