Цитировать предыдущий ответ: «Вы не можете - потому что это нарушит инкапсуляцию». к которому я хотел бы добавить следующее:
Однако есть угловой случай, когда вы можете, а именно, если метод static
(public
или protected
). Вы не можете переписать статический метод .
Наличие метода public static
тривиально, чтобы доказать, что вы действительно можете это сделать.
Однако для protected
вам нужно изнутри одного из ваших методов выполнить приведение к любому суперклассу в пути наследования, и этот метод суперкласса будет вызван.
Это угловой случай, который я исследую в своем ответе:
public class A {
static protected callMe(){
System.out.println("A");
}
}
public class B extends A {
static protected callMe(){
System.out.println("B");
}
}
public class C extends B {
static protected callMe(){
System.out.println("C");
C.callMe();
}
public void accessMyParents(){
A a = (A) this;
a.callMe(); //calling beyond super class
}
}
Ответ остается прежним Нет, но я просто хотел показать случай, когда вы можете, хотя это, вероятно, не имеет никакого смысла, и это просто упражнение.