相关疑难解决方法(0)

隐藏类的实例变量

我想知道为什么Java对于超类和具有相同名称的实例变量的子类有这种奇怪的行为.

假设我们有以下类定义:

class Parent {
    int var = 1;
}

class Child extends Parent {
    int var = 2;
}
Run Code Online (Sandbox Code Playgroud)

通过这样做,我们应该隐藏超类的变量var.如果我们没有明确指定的方式来访问Parentvar通过super电话,那么我们不应该能够访问var一个孩子的一个实例.

但是当我们有一个演员表时,这个隐藏机制就会破坏:

Child child = new Child();
Parent parent = (Parent)child;
System.out.println(parent.var); // prints out 1, instead of 2
Run Code Online (Sandbox Code Playgroud)

这不完全绕过整个隐藏点吗?如果是这种情况,那么这不会使这个想法完全没用吗?

编辑:我在Java教程中专门提到这篇文章.它提到了

在子类中,超类中的字段不能通过其简单名称引用.相反,必须通过超级...访问该字段

从我在那里读到的内容,似乎暗示Java的开发人员在这方面考虑了某种技术.虽然我同意这是一个相当模糊的概念,但总的来说可能是不好的做法.

java oop

15
推荐指数
2
解决办法
1万
查看次数

标签 统计

java ×1

oop ×1