Когда класс расширяет другой, он наследует все методы и переменные суперкласса. Оба метода и переменные могут использоваться по-разному в подклассе, если вы определяете его по-разному в подклассе с той же сигнатурой. Теперь Oracle отличается между переписыванием и скрытием (http://docs.oracle.com/javase/tutorial/java/IandI/override.html). В нем говорится, что метод экземпляра перезаписывает свой метод суперкласса, а метод класса скрывает его. "Различие между скрытием и переопределением имеет важные последствия. Версия переопределенного метода, который вызывается, является таковой в подклассе. Версия скрытого метода, который вызывается, зависит от того, вызвана ли она из суперкласса или подкласса".
Предположим, что у меня есть 2 класса Да и Возможно. Да простирается Может быть. Может быть, String a.
class Maybe {
String a;
public static void printOut() {
System.out.println("Maybe");
}
public void printAndSet() {
a = "Maybe";
System.out.println(a);
}
}
class Yes extends Maybe {
public static void printOut() {
System.out.println("Yes");
}
pubilc void printAndSet() {
a = "Yes";
}
}
class Print{
public static void mail(String[] args) {
Maybe m = new Maybe();
Yes y = new Yes();
Maybe.printOut();
Yes.printOut();
m.printAndSet();
y.printAndSet();
}
И я говорю: он распечатает может быть да может быть да
Но после того, как я прочитал статью Oracle, я подумал, что ей придется распечатать:
yes
yes
maybe
yes
Поскольку метод экземпляра перезаписывает свой метод суперкласса.
Я уверен, что я прав, но я уверен, что Oracle знает лучше, поэтому я думаю, что я просто не понял эту статью. Нельзя сказать, что когда я вызываю метод экземпляра из объекта суперкласса, он использует перезаписанный метод. Поэтому я не понимаю, почему отличить переписывание и скрытие! Может кто-нибудь помочь?
Изменить; Введенный код вместо описания классов!