Rol*_*all 6 java static instance-variables instance shadowing
基本上我想知道为什么静态方法不能被实例方法遮蔽,(我知道为什么,它会在某些情况下导致模糊),而静态变量可以被实例变量遮蔽(它只适用于子类) ).
例:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
因此,如果我尝试在超类中声明int area(实例变量)static int area它会产生错误,但是当在子类中声明时它不会发生,即使static int area从子类仍然可见.
尝试使用实例方法隐藏静态方法和尝试使用实例变量隐藏静态变量之间的行为方面的差异究竟是什么.
提前致谢.
在您的子类(BedroomFlat)中,编译器不允许您声明与基类中的静态方法同名的实例方法,因为方法重写仅适用于实例方法。扩展类仅使实例方法可供子类覆盖(而不是类方法,即静态方法)。此外,当您尝试声明与静态方法具有相同签名的方法时,编译器将抛出错误,指出您无法重写静态方法,因为重写是针对实例方法进行的。
但是编译器不会阻止您声明与超类中的静态变量同名的实例变量,因为变量不是重写的候选者。