Методы экземпляра Java: не только переопределены, но и скрыты
В качестве новичка (под редакцией: вместо этого написал noob) официальный учебник по Java, в самом низу http://docs.oracle.com/javase/tutorial/java/IandI/override.html, утверждает, что статический методы скрыты в подклассах, которые переопределяют их, в то время как методы экземпляра явно переопределены.
Но в разделе http://docs.oracle.com/javase/tutorial/java/IandI/polymorphism.html этого же учебника можно вызвать переопределенный метод суперкласса изнутри переопределяющего метода (и, возможно, из другие методы).
Прошу прощения за некоторые излишки пуризма с моей стороны, но из этого я могу только сделать вывод, что методы экземпляра не только переопределены, но и скрыты.
Мысли?
2 ответа
Я предполагаю, что вы ищете оценку своих рассуждений. Определение полиморфизма - это изменение функциональности в подклассе, которое ранее существовало в суперклассе. Так что да, он скрывает это, потому что интерфейс переопределяющего подкласса больше не предоставляет доступ к методу суперкласса извне класса, в пользу реализации подкласса.
пример
Итак, у нас есть суперкласс:
public abstract class Person {
public void speak() {
System.out.println("Person is speaking!");
}
}
И мы создаем наш подкласс:
public class Male {
public void speak() {
System.out.println("I like beer and code.");
}
}
Male
класс скрывает Person
реализация speak
метод. Так что в этом смысле это скрыто. Но, метод суперкласса может быть доступен изнутри Male
учебный класс.
public void speak() {
super.speak();
System.out.println("I like beer and code.");
}
Ваша интерпретация имеет смысл, но не позволяйте ей сбить вас с толку. Важная часть имеет решающее значение, это то, что вы должны понимать.
Я бы не назвал переопределенный метод "скрытым", так как он все еще доступен, хотя и в другой реализации. Это чувство переопределения.
Что касается сокрытия статических методов, просто забудьте об этом. Делать это разрешено, но это совсем ничего не покупает. Никто не использует это, и вы не должны. Просто забудь это.