public class ClassT public static void mainString args Father f = new Son; Systemoutprintlnfx; class Son extends Father int x = 30; public Son th
上面的代码是一个Java程序,包含了一个父类Father和一个子类Son,以及一个主类ClassT。程序的执行从主类的main方法开始。
在main方法中,创建了一个Father类的对象f,并将其引用赋值给一个Father类型的变量。这里使用了多态的特性,即子类的对象可以赋值给父类类型的变量。
然后调用System.out.println(f.x),输出变量f的x属性的值。由于多态的特性,实际上调用的是子类Son的x属性,而不是父类Father的x属性。
在子类Son的定义中,x被赋值为30。构造函数public Son()被调用,首先调用this.print()方法。由于多态的特性,实际上调用的是子类Son的print()方法。print()方法输出"Son.x = 30"。
然后x被重新赋值为40。
在父类Father的定义中,x被赋值为10。构造函数public Father()被调用,首先调用this.print()方法。由于多态的特性,实际上调用的是子类Son的print()方法。print()方法输出"Son.x = 40"。
然后x被重新赋值为20。
最后,在主类的main方法中,输出的结果是"Son.x = 40"。这是因为在构造子类对象Son的过程中,先调用了父类构造函数,然后调用了子类构造函数,最后输出的是在子类构造函数中重新赋值后的x属性的值
原文地址: https://www.cveoy.top/t/topic/hWWn 著作权归作者所有。请勿转载和采集!