Java新手求助:解析指定代码执行结果及相关参考文档咨询
Java代码执行结果解析与知识点指南
嘿,我来帮你拆解这段Java代码的执行逻辑,还有最终的输出结果~首先先把你没写完的代码补全(默认最后是输出三个对象的key值),完整代码如下:
class A { public int key; public void f() { key = key + 1; } } class B extends A { public void f() { key = key + 10; } } public class Problem1 { public static void main(String[] args) { B P = new B(); P.key = 0; A Q = P; A R = new A(); R.key = 8; P.f(); Q.f(); R.f(); System.out.println("P.key = " + P.key); System.out.println("Q.key = " + Q.key); System.out.println("R.key = " + R.key); } }
执行结果
运行这段代码后,控制台会输出:
P.key = 20 Q.key = 20 R.key = 9
逐行逻辑拆解
B P = new B(); P.key = 0;:创建一个B类的实例,把它的key初始化为0。A Q = P;:这里是Java的向上转型——用父类A的引用指向子类B的实例。注意:Q和P其实指向的是同一个B对象,只是引用类型不同。A R = new A(); R.key = 8;:创建一个A类的独立实例,把它的key初始化为8。P.f();:调用B类重写后的f()方法,key从0变成0+10=10。Q.f();:虽然Q是A类型的引用,但它实际指向的是B类的实例,Java会根据实际对象类型调用方法(这就是多态的核心),所以还是执行B的f(),key从10变成10+10=20。R.f();:R是A类的实例,调用A原本的f()方法,key从8变成8+1=9。- 最后输出时,
P和Q指向同一个对象,所以key都是20;R是独立的A实例,key是9。
需查阅的知识点
如果你想更深入理解这段代码的逻辑,重点看这几个Java基础知识点:
- 方法重写(Method Overriding):子类如何覆盖父类的方法
- 多态(Polymorphism):父类引用指向子类实例时的方法调用规则
- 向上转型(Upcasting):父类引用引用子类对象的语法与特性
你可以查阅Java官方文档中关于「继承与多态」「方法重写」的内容,或者Java基础教程里的对应章节,这些都是Java面向对象编程的核心内容哦。
内容的提问来源于stack exchange,提问作者user9270836
相关产品推荐
相关产品推荐

