class Super {
int i = 0;
public Super(String a) {
System.out.println("A");
i = 1;
}
public Super() {
System.out.println("B");
}
}
class Demo extends Super {
int i = 10;
public Demo(String a) {
super();
i = 5;
System.out.println("C");
}
}
class Test {
public static void main(String[] args) {
int i = 4;
/*
* 在实例化Demo类对象时调用了Demo类中的Demo(String a)这个构造函数
* 而这个构造函数又通过super()调用了父类的构造函数,所以第一步输出"B"
* 然后调用Demo类Demo(String a)这个构造函数函数中的打印方法输出"C"
*/
Super d = new Demo("A");
/*
* 多态中成员变量的特点是无论编译和运行都参考左边,即引用型变量所属的类。
* 由于d当前是属于Super的,所以d.i的值为super类中的int i = 0;
* 所以这步输出的结果为"0"
*/
System.out.println(d.i);
/*
* 这个i打印的是main函数的局部变量int i = 4;
* 所以这步输出的结果为"4"
*/
System.out.println(i);
}
}
在整个实现中只用到了一个多态的特性,即向上转型.也就是这句代码Super d = new Demo("A");
其它代码都没有用到多态的特性.
|