В основном я хотел бы знать, почему статический метод не может быть затенен методом экземпляра (я знаю, почему это приведет к неоднозначности в определенных обстоятельствах), тогда как статическая переменная может быть затенена переменная экземпляра (применяется только для подклассов).Затенение переменных и методов в Java
Пример:
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
все еще видно из подкласса.
В чем разница в отношении поведения между попытками затенения статического метода с помощью метода экземпляра и попытки затенения статической переменной переменной экземпляра.
Заранее спасибо.
Возможный дубликат [Почему Java не позволяет переопределять статические методы?] (Http://stackoverflow.com/questions/ 2223386/why-doesnt-java-allow-overriding-of-static-methods) – Makoto
Я полностью понимаю, почему статические методы не переопределяются. Я хотел знать только, почему тени переменной области экземпляра (в терминах new Bedroom(). A вернет переменную экземпляра, а не суперстатическую), а для методов это не может быть – Rollerball