JAVASE--到底什么是继承?
文/纵骑横飞-zsx 本文版权归作者所有,谢绝公然转载!
先上 干货 :
子类到底调的是谁?
如图,我把最顶层的父类(除Object亦或Object)作为原始层。如图,每个区间内最靠上的就是原始层,区间最靠近映射名的作为最新层。
我们来做一下实验,看看这三个区调用的到底是 原始层还是最新层的数据:
public class Father {
String a="(a,b)";
String b="(b,c)";
}
public class Son extends Father{
String b = "new(b,c)";
String c = "(c,d)";
public static void main(String[] args) {
Son s = new Son();
// 修改前
System.out.println(s.a);
System.out.println(s.b);
System.out.println(s.c);
}
}
这个小程序的结果毫不出乎我们的意料:
(a,b)
new(b,c)
(c,d)
接下来修改它们的值,再看看到底是谁变脸了:
public class Son extends Father {
String b = "new(b,c)";
String c = "(c,d)";
private Father getFather() {
return Son.super;
}
public static void main(String[] args) {
Son s = new Son();
s.a = "motified(a,b)";
s.b = "motified(b,c)";
s.c = "motified(c,d)";
System.out.println(s.getFather().a);
System.out.println(s.getFather().b);
System.out.println(s.c);
}
}
你会惊奇的发现,继承的调用真的只是调用最新层的数据:
motified(a,b)
(b,c) //这个区间最新层在Son层
motified(c,d)
至此,一句话概述,继承就是最新层直接的映射。