Вы можете скрыть поле, но не переопределить оно.
Сокрытие означает, что поле будет иметь различное значение в зависимости от того, к какому классу оно обращено. Поле в подклассе будет «скрывать» поле в суперклассе, но оба существуют.
Это очень плохая практика, чтобы скрыть поле, но работает:
public class HideField {
public static class A
{
String name = "a";
public void doIt1() { System.out.println( name ); };
public void doIt2() { System.out.println( name ); };
}
public static class B extends A
{
String name = "b";
public void doIt2() { System.out.println( name ); };
}
public static void main(String[] args)
{
A a = new A();
B b = new B();
a.doIt1(); // print a
b.doIt1(); // print a
a.doIt2(); // print a
b.doIt2(); // print b <-- B.name hides A.name
}
}
В зависимости от того, был ли метод переопределен , доступ к полю в A
или B
осуществляется.
Никогда не делай этого! Это никогда не решит твою проблему и создает очень тонкие ошибки, связанные с наследованием.