【发布时间】:2013-02-25 13:27:05
【问题描述】:
基本上我想知道为什么静态方法不能被实例方法遮蔽,(我知道为什么,在某些情况下会导致歧义),而静态变量可以被实例变量遮蔽(它适用仅适用于子类)。
例子:
public class Apartment{
static int area = 10;
public static int getArea(){
return area;
}
}
class BedroomFlat extends Apartment {
int area = 10;// no problem at all
public int getArea(){ // illegal line it cannot hide the super static method
return area;
}
}
因此,如果我尝试在超类中声明int area(实例变量)和static int area,则会出现错误,但在子类中声明时不会发生这种情况,即使static int area 仍然可见来自子类。
尝试使用实例方法隐藏静态方法和尝试使用实例变量隐藏静态变量之间的行为究竟有什么区别。
提前致谢。
【问题讨论】:
-
我完全理解为什么静态方法不会被覆盖。我只想知道为什么实例变量区域阴影(用 new Bedroom().a 而言将返回实例变量而不是超静态),而对于方法它不会发生
标签: java static instance instance-variables shadowing