gpt4 book ai didi

Java继承(抱歉我不知道如何在标题中说清楚......)

转载 作者:行者123 更新时间:2023-11-30 04:32:01 24 4
gpt4 key购买 nike

以下代码的输出是什么?

class A {
public int data=5;
private int pd = 6;

public void print() {
System.out.println(data+pd);
f();
}

protected void f() {
System.out.println(“A::f()”);
}
}

class B extends A {
public int data=2;
private int pd = 3;

public void print() {
super.print();
System.out.println(data+pd);
}

protected void f() {
System.out.println(“B::f()”);
}
}

public class TestAB {
public static void main(String[] args) {
A a = new B();
a.print();
System.out.println(a.data);
}
}

输出为:

11
B::f()
5
5

我只知道对象a属于B类。但以下细节是如此令人困惑......有人能解释一下基类和继承类中定义的相同变量发生了什么吗?调用了哪个print()'或print()

感谢您的宝贵时间。

最佳答案

当调用a.print();时,B类的打印函数将被调用。希望您清楚这一点(多态性)。在 B 类的 print() 方法中,调用了 super.print(),而该方法又调用了方法 f()。再次根据多态性原理,类 Bf() 方法将被调用。

多态性仅适用于函数。因此,主函数中的 System.out.println(a.data); 仅打印 A class 变量,即 5 和不是 2。希望你能理解这一点。

请引用此链接:

http://www.coderanch.com/t/392179/java/java/Polymorphism-data-members

关于Java继承(抱歉我不知道如何在标题中说清楚......),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14412055/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com