以下代码的输出是什么?
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()
。再次根据多态性原理,类 B 的 f()
方法将被调用。
多态性仅适用于函数。因此,主函数中的 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/