Преимущество метода сокрытия в Java
Я читал о концепции сокрытия методов в Java, но я не уверен, что понимаю преимущества. В каких случаях будет полезен метод сокрытия?
2 ответа
Вы можете прочитать больше здесь http://docs.oracle.com/javase/tutorial/java/IandI/override.html
Короче говоря, преимущество заключается в том, что вы можете реализовать статический метод в подклассе, который имеет ту же сигнатуру, что и статический метод в суперклассе. Если вы не можете сделать это, вы не можете добавить такие методы в подклассы, и если вы добавите такой метод в суперкласс, все его подклассы не будут компилироваться.
Кстати: вы можете сделать статический метод не позволяющим скрыть, сделав его окончательным.
class Superclass {
public static final void method() { }
}
class Subclass extends Superclass {
public static void method() { } // doesn't compile
}
чтобы метод был скрыт, вы можете сделать его не финальным
class Superclass {
public static void method() { }
}
В этом нет никакой "выгоды", это просто то, как спецификация языка решила иметь дело с ситуациями, когда статические методы связанных классов имеют одинаковую сигнатуру. Разработчики языка не нашли разумного способа обеспечить "переопределение" функциональности 1, поэтому они выбрали легкий путь.
1 Существует способ заставить переопределения статических методов работать на абстрактном уровне ОО, что подтверждается тем, как это делается в Objective-C. Однако альтернативу сложнее понять.