【发布时间】:2017-02-15 12:40:31
【问题描述】:
那么为什么我可以将父类转换为子类而不是相反呢?
当我将父类的对象设置为子类,反之亦然时,为什么不会复制属性?
public class senior {
private int a = 6;
public int getA() {
return a;
}
public int x = 1;
}
class junior extends senior {
public junior() {
super();
}
public int x = 0;
}
public class runner {
public static void main(String[] args) {
senior S = new senior();
junior J = new junior();
senior S1 = new senior();
junior J1 = new junior();
int b = J.getA();
System.out.println(b);
S = J; // aliasing ?
// J 0 S 1
System.out.println(S.x); // should print 0 but prints 1
System.out.println(J.x);
J1 = (junior) S1; // Senior cannot be cast to junior, why?
System.out.println(S1.x);
System.out.println(J1.x);// should print 1 but prints 0
}
}
【问题讨论】:
-
这很容易 - 因为 Junior IS-A Senior,但反过来就不是真的了。父类与子类无关。
-
Junior不是Senior,但每个Senior都是Junior+ 一些经验 -
因为 Junior 具有 Senior 的所有属性,但 Senior 不具有 Junior 的所有属性。如果您将 Junior 转换为 Senior,您会将 Junior 简化为 Senior,从而删除 Junior 拥有的所有属性。
-
请注意,如果您在两个类中定义字段
x,则子类中的字段将隐藏超类中的字段,即junior(顺便说一句,看看Java代码约定)只会查看它自己的x(您可以通过super.x访问超类'x,但只能上一级,它仍然是糟糕的设计)。
标签: java inheritance