给定数据类型效果如何覆盖成员变量

我研究了一些关于这个主题的相关文章,并且我已经了解到,当我们在子类中创建一个相同名称的变量时,这就是所谓的隐藏。

class A {
    int i = 10;

    public void printValue() {
        System.out.print("Value-A");
        System.out.println(i);
    }
}

class B extends A {
    int i = 12;

    public void printValue() {
        System.out.print("Value-B");
        System.out.println(i);
    }
}

public class Test {
    public static void main(String args[]) {
        A a = new B();
        a.printValue();
        System.out.print(a.i);
    }
}

当我用type A实例化class B并打印成员数据时

A a=new B();
System.out.println(a.i)//The output is `10`.(The value of parent class member data).

但是当我将class B实例化为class B type B

B a=new B();
System.out.println(a.i)//The output is 12. (The value of parent class member data)

我想知道他们有什么不同。


变量绑定到引用,而不是绑定到创建的对象。 在你的例子中, A a = new B(); 这里a是对A类型A变量绑定的引用。 并且,创建的对象是类型B ,方法绑定到该类型。 这就是为什么它选择参考变量的值。 这被称为数据隐藏。 因为当我们在子类中创建相同的变量时,子类变量的值被隐藏在super类变量下。 希望能帮助到你。


多态性仅适用于方法。 变量仍然绑定到该类型。 你不能变换变量。 这就是您在更改类型时看到不同输出的原因。

简单地说,当你写

 A a=new B();

只要记住,变量绑定到左侧,方法从右侧执行。

链接地址: http://www.djcxy.com/p/59523.html

上一篇: How the Given Data type effect Overriding member variables

下一篇: How do I load an variable from a java class to a different class