Переопределение метода 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() с примером