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

标签 java class inheritance

以下代码的输出是什么?

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/

相关文章:

java - 如何更改 Hibernate Tools 反向工程 DAO 类的名称?

java - 使用 URLConnection 进行连接池?

用于将字符与给定语言进行匹配的 Java 库

jQuery tmpl 插件 - 动态内容的模板结果问题(错误?)

ios - UILabels 和自定义 UITableView 单元格

java 静态方法和接口(interface)/继承

Swift 类型和良好的旧时尚分层单一继承

java - 使用 Java 将数据插入 mySQL DB 时出错

java - 确定 .class 文件是否使用调试信息编译?

c++ - 将派生类传递给基函数