2 meta cpp Meta_Cpp 于 2014.05.26 00:00 提问

Java中的数据成员继承的多态

public class PolymorphismTest {

public void show() {
    A a = new B();
    B b = new B();
    a.show();
    b.show();
    System.out.println("a.a: " + a.a);
    System.out.println("b.a: " + b.a);
}


public class A { 
    public int a = 5;
    public void show() {
        System.out.println("A show");
    }

}

public class B extends A {
    public int a = 6;
    public void show() {
        System.out.println("B show");
    }
}

}

show()函数执行实验结果:

B show
B show
a.a: 5
b.a: 6

为什么这里a.a的值是5而不是6呢?

2个回答

AngryPenguin
AngryPenguin   2014.05.26 15:31
已采纳

Java中成员变量不具有多态性。一般情况下,方法可以在运行时绑定(动态绑定),但是变量只能在编译时绑定(静态绑定)。如果要得到B类中的a的值可以在B类中添加a的getter方法然后调用a.getA();

Meta_Cpp
Meta_Cpp 很赞的回答,谢谢!
接近 4 年之前 回复
u010882253
u010882253   2014.07.18 09:46

方法动态绑定,和对象有关;变量静态绑定,和类型有关

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!