Java 在继承上困惑,有人能帮我吗?
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
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
,并在超类中声明一个字段。在这种情况下,可以看到