Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 给定的数据类型如何影响重写成员变量_Java_Oop - Fatal编程技术网

Java 给定的数据类型如何影响重写成员变量

Java 给定的数据类型如何影响重写成员变量,java,oop,Java,Oop,我研究了一些关于这个主题的相关文章,我了解到当我们在一个子类中创建一个同名变量时,这叫做隐藏 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() {

我研究了一些关于这个主题的相关文章,我了解到当我们在一个子类中创建一个同名变量时,这叫做隐藏

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);
    }
}
当我用
类型A
实例化
类别B
并打印成员数据时

A a=new B();
System.out.println(a.i)//The output is `10`.(The value of parent class member data).
但是当我将
类B
实例化为
类型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();

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

变量绑定到引用,而不是创建的对象。在您的示例中,
aaa=newb()
此处
a
是类型为
a
的变量绑定到的引用。并且,创建的对象是类型
B
,方法绑定到该类型。这就是它为引用变量选择值的原因。这称为数据隐藏。因为当我们在子类中创建相同的变量时,子类的变量值隐藏在
super
class变量下。希望有帮助。

非常接近的问题