Преимущество метода сокрытия в 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. Однако альтернативу сложнее понять.

Другие вопросы по тегам