

































A b = new B(); 这条语句,实际上有三个过程:
(1) A b;
将b声明为父类对象,只是一个引用,未分配空间
(2) B temp = new B();
通过B类的构造函数建立了一个B类对象的实例,也就是初始化
(3) a = (A)temp;
将子类对象temp转换未父类对象并赋给b,这就是上传(upcast),是安全的。
经过以上3个过程,b就彻底成为了一个A类的实例。
子类往往比父类有更多的属性和方法,上传只是舍弃,是安全的;而下传(downcast)有时会增加,通常是不安全的,不过上传会重写A的方法,多态的特性。
父类的属性不能被子类覆盖,而父类的方法可以被子类覆盖,因此b.a输出的是父类的属性,而b.show()调用的则是子类的方法。
OUTPUT:
PolyBase
PolySub
1
PolyBase A: a=1 b=2.0
PolySub b=3.0 d=java prog