Скрытие методов в Java

В Java мы не можем переопределять методы private, static и final, объявленные в родительском классе, в дочерних классах. Для методов private и final компилятор выдаст ошибки. Но в случае статических методов компилятор позволяет создавать методы с тем же именем и аргументами.

Объявление одинаковых статических методов в родительских и дочерних классах называется сокрытием метода. Для нестатических методов это известно как переопределение метода.

1. Понимание метода сокрытия на примере

В следующем коде мы создали два класса Parent и Child. Оба класса определяют статический метод display(). Этот код успешно выполняется без каких-либо предупреждений или ошибок.

class Parent {static void display() {System.out.println("Super");}}class Child extends Parent {static void display() {System.out.println("Sub");}}

На первый взгляд, похоже, что Child переопределил метод display() из класса Parent. Если это правда, то следующая программа должна вывести «Sub» в соответствии с правилами переопределения методов.

Parent instance = new Child();instance.display(); //Prints Super

2. Можно ли переопределить статические методы, объявив нестатические методы в дочернем классе?

Нет, мы не можем удалить ключевое слово static из объявления метода в дочернем классе. Компилятор выдаст ошибку при такой попытке.

В предыдущем примере, если мы удалим ключевое слово static из метода display() в Child, компилятор сообщит, что мы не можем переопределить статический метод из Parent.

Скрытие методов в Java0

3. Заключение

В Java переопределение методов допустимо только тогда, когда мы говорим в терминах методов экземпляра. Как только мы начинаем говорить в терминах статических методов, следует использовать термин скрытие методов, поскольку статические методы принадлежат объекту класса.

К счастью, приведенные выше термины встречаются в большей части литературы по Java(даже в Спецификации языка Java ).

Прокрутить вверх