Переопределение метода Java
Переопределение метода Java
В этом руководстве мы узнаем о переопределении методов в Java с помощью примеров.
В предыдущем уроке мы узнали о наследовании. Наследование — это свойство ООП, которое позволяет нам получить новый класс (подкласс) из существующего класса (суперкласса). Подкласс наследует атрибуты и методы суперкласса.
Теперь, если один и тот же метод определен и в суперклассе, и в подклассе, то метод класса подкласса переопределяет метод суперкласса. Это называется переопределением метода.
<час>Пример 1:переопределение метода
class Animal {
public void displayInfo() {
System.out.println("I am an animal.");
}
}
class Dog extends Animal {
@Override
public void displayInfo() {
System.out.println("I am a dog.");
}
}
class Main {
public static void main(String[] args) {
Dog d1 = new Dog();
d1.displayInfo();
}
}
Вывод :
I am a dog.
В приведенной выше программе displayInfo() метод присутствует как в Animal суперкласс и Собака подкласс.
Когда мы вызываем displayInfo() используя d1 объект (объект подкласса), метод внутри подкласса Dog называется. displayInfo() метод подкласса переопределяет тот же метод суперкласса.

Обратите внимание на использование @Override аннотация в нашем примере. В Java аннотации — это метаданные, которые мы использовали для предоставления информации компилятору. Здесь @Override аннотация указывает компилятору, что метод после этой аннотации переопределяет метод суперкласса.
Не обязательно использовать @Override . Однако, когда мы используем это, метод должен следовать всем правилам переопределения. В противном случае компилятор выдаст ошибку.
Правила переопределения Java
- И суперкласс, и подкласс должны иметь одинаковое имя метода, один и тот же тип возвращаемого значения и один и тот же список параметров.
- Мы не можем переопределить метод, объявленный как
final. иstatic. - Мы всегда должны переопределять абстрактные методы суперкласса (будет обсуждаться в последующих руководствах).
ключевое слово super в переопределении Java
Распространенный вопрос, возникающий при переопределении в Java:
Можем ли мы получить доступ к методу суперкласса после переопределения?
Ну, ответ Да . Чтобы получить доступ к методу суперкласса из подкласса, мы используем super ключевое слово.
Пример 2. Использование ключевого слова super
class Animal {
public void displayInfo() {
System.out.println("I am an animal.");
}
}
class Dog extends Animal {
public void displayInfo() {
super.displayInfo();
System.out.println("I am a dog.");
}
}
class Main {
public static void main(String[] args) {
Dog d1 = new Dog();
d1.displayInfo();
}
}
Вывод :
I am an animal. I am a dog.
В приведенном выше примере подкласс Dog переопределяет метод displayInfo() надкласса Animal .
Когда мы вызываем метод displayInfo() используя d1 объект Собака подкласс, метод внутри Dog вызывается подкласс; метод внутри суперкласса не вызывается.
Внутри displayInfo() Собаки подкласс, мы использовали super.displayInfo() для вызова displayInfo() суперкласса.
Важно отметить, что конструкторы в Java не наследуются. Следовательно, в Java нет такой вещи, как переопределение конструктора.
Однако мы можем вызвать конструктор суперкласса из его подклассов. Для этого мы используем super() . Чтобы узнать больше, посетите суперключевое слово Java.
Спецификаторы доступа в переопределении метода
Один и тот же метод, объявленный в суперклассе и его подклассах, может иметь разные спецификаторы доступа. Однако есть ограничение.
Мы можем использовать только те спецификаторы доступа в подклассах, которые обеспечивают больший доступ, чем спецификатор доступа суперкласса. Например,
Предположим, метод myClass() в суперклассе объявлено protected . Затем тот же метод myClass() в подклассе может быть либо public или protected , но не private .
Пример 3:Спецификатор доступа в переопределении
class Animal {
protected void displayInfo() {
System.out.println("I am an animal.");
}
}
class Dog extends Animal {
public void displayInfo() {
System.out.println("I am a dog.");
}
}
class Main {
public static void main(String[] args) {
Dog d1 = new Dog();
d1.displayInfo();
}
}
Вывод :
I am a dog.
В приведенном выше примере подкласс Dog переопределяет метод displayInfo() надкласса Animal .
Всякий раз, когда мы вызываем displayInfo() используя d1 (объект подкласса), вызывается метод внутри подкласса.
Обратите внимание, что displayInfo() объявляется protected в разделе Животное суперкласс. Тот же метод имеет public спецификатор доступа в Dog подкласс. Это возможно, потому что public обеспечивает больший доступ, чем protected .
Переопределение абстрактных методов
В Java абстрактные классы создаются как суперклассы других классов. И если класс содержит абстрактный метод, его обязательно переопределить.
Мы узнаем больше об абстрактных классах и переопределении абстрактных методов в последующих руководствах.
java
- Операторы Java
- Java-проба с ресурсами
- Java-аннотации
- Типы аннотаций Java
- Метод String Length() в Java:как найти на примере
- Метод Java String indexOf() с подстрокой и примерами
- Метод Java String charAt() с примером
- Метод Java String compareTo():как использовать с примерами
- Строка Java содержит () Метод | Проверить подстроку с примером
- Метод Java String endWith() с примером