如果标题错误,请原谅.有两个类Test和TestChild1,其中TestChild1继承自Test.这两个类都有一个名为"a"的变量.当我尝试通过使用子类对象实例化的超类变量访问变量"a"时,它给出了在超类而不是子类中初始化的值.以下是提出疑问的代码
class Test {
public int a = 10;
}
class TestChild1 extends Test {
public int a = 20;
}
class Main {
public static void main(String args[]) {
Test test = new TestChild1();
System.out.println(test.a); // results in 10
}
}
Run Code Online (Sandbox Code Playgroud)
请告诉我这种行为的原因.提前致谢....
因为Java设计者决定使方法具有多态性(因此可以覆盖),而不是字段.
当您从对象引用字段时,编译器根据声明的变量类型决定使用哪个字段,在本例中为Test.
当您引用方法时,JVM在运行时根据对象的实际具体类型选择调用哪个方法,在本例中为TestChild.
OO完全是关于状态的封装,所以你几乎不应该将字段暴露给外部.
| 归档时间: |
|
| 查看次数: |
595 次 |
| 最近记录: |