Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.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 - Fatal编程技术网

Java 在继承上困惑,有人能帮我吗?

Java 在继承上困惑,有人能帮我吗?,java,Java,Java代码 public class A { int x; public A() { x = 0; } public void print() { System.out.println("This is A"); } } public class B extends A { int x; public B() { x = 1; } public void pr

Java代码

public class A {
    int x;

    public A() {
       x = 0;
    }

    public void print() {
        System.out.println("This is A");
    }
}

public class B extends A {
     int x;

     public B() {
        x = 1;
     }

     public void print() {
         System.out.println("This is B");
     }
}

B b = new B();
A a = b;

System.out.print(a.x);---------------->0 
a.print();---------------->This is B

我很困惑。我为b类创建对象b,虽然我将b分配给a,但我认为b仍然应该指向b类。为什么“a.x”将返回0而不是1?为什么a.x指向a中的x,而a.print()指向B中的print()方法?

字段不是多态的,但方法是多态的

这意味着方法将在运行时被引用的对象上调用


字段变量与引用绑定,因此如果您从类
A
中删除字段
x
,并尝试相同的代码,它将无法编译,您将看到Java中如何应用的一些不规则性。在调用
a.print()
调用
B
print()
时可以看到多态性,而字段则不是这种情况。该字段与引用绑定,因此在本例中,
b.x
a.x
是不同的(尽管可以在
b
的定义中省略
x
,并在超类中声明一个字段。在这种情况下,可以看到