Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Правила переопределения метода




Пример 2

class Animal { public void move() { System. out. println(" Животные могут двигаться" ); }} class Dog extends Animal { public void move() { System. out. println(" Собаки могут ходить и бегать" ); } public void bark() { System. out. println(" Собаки могут лаять" ); }} public class TestDog { public static void main(String args[]) { Animal a = new Animal(); // Animal - ссылка и объект Animal b = new Dog(); // Animal - ссылка, но Dog - объект a. move(); // Запускает метод в классе Animal b. move(); // Запускает метод в классе Dog b. bark(); }}

После запуска программы будет выдан такой результат:

TestDog. java: 26: error: cannot find symbol b. bark();   ^ symbol: method bark() location: variable b of type Animal1 error

Программа выдаст ошибку во время компиляции, так как ссылочный тип b у Animal не имеет метода под именем bark.

Правила переопределения метода

· Список аргументов должен быть точно таким же, как и для переопределённого метода.

· Возвращаемый тип должен быть таким же или подтипом возвращаемого типа, объявленного в исходном переопределенном методе в суперклассе.

· Уровень доступа не может быть более ограниченным, чем уровень доступа переопределённого метода. Например, если метод суперкласса объявлен public, то переопределяемый метод в подклассе не может быть private или protected.

· Методы экземпляров могут быть переопределены только если они наследованы подклассом.

· Методы, которые объявлены как final, не могут быть переопределены.

· Статические методы, которые объявлены как static, не могут быть переопределены, но могут быть повторно объявлены.

· Если метод нельзя наследовать, то его нельзя переопределить.

· Подкласс внутри того же пакета, что и суперкласс экземпляра, может переопределять любой метод суперкласса, который не объявлен как private или final.

· Подкласс в другом пакете может переопределять только не final методы, объявленные как public или protected.

· Переопределяемый метод может выдавать любые непроверенные исключения вне зависимости от того, переопределяет ли переопределённый метод какие-либо непроверенные исключения или нет. Однако, переопределяемый метод не должен генерировать проверенные исключения, которые являются новыми или более широкими, чем те, которые объявлены переопределённым методом. Переопределенный метод может генерировать более узкие или меньшие исключения, чем переопределенный метод.

· Конструкторы нельзя переопределить.

Использование ключевого слова super

Вызывая версию суперкласса переопределённого метода, используется ключевое слово super.

Пример

class Animal { public void move() { System. out. println(" Животные могут двигаться" ); }} class Dog extends Animal { public void move() { super. move(); // Вызывает метод суперкласса System. out. println(" Собаки могут ходить и бегать" ); }} public class TestDog { public static void main(String args[]) {     Animal b = new Dog(); // Animal - ссылка, но Dog - объект b. move(); // Запуск метода в классе Dog }}

После запуска программы будет выдан такой результат:

Животные могут двигатьсяСобаки могут ходить и бегать

24. Java – Полиморфизм

Полиморфизм – способность объекта принимать множество различных форм. Наиболее распространенное использование полиморфизма в ООП происходит, когда ссылка на родительский класс используется для ссылки на объект дочернего класса. Постараемся разобраться с понятием полиморфизма в Java простыми словами, так сказать для чайников.

Любой объект в Java, который может пройти более одного теста IS-A считается полиморфным. В Java все объекты полиморфны, так как любой объект пройдёт тест IS-A для своего собственного типа и для класса Object.

Важно знать, что получить доступ к объекту можно только через ссылочную переменную. Ссылочная переменная может быть только одного типа. Будучи объявленной, тип ссылочной переменной изменить нельзя.

Ссылочную переменную можно переназначить к другим объектам, которые не объявлены как final. Тип ссылочной переменной определяет методы, которые она может вызвать на объекте.

Ссылочная переменная может обратиться к любому объекту своего объявленного типа или любому подтипу своего объявленного типа. Ссылочную переменную можно объявить как класс или тип интерфейса.

Пример 1

Рассмотрим пример наследования полиморфизм в Java.

public interface Vegetarian{}public class Animal{}public class Deer extends Animal implements Vegetarian{}

Теперь класс Deer (Олень) считается полиморфным, так как он имеет множественное наследование. Следующие утверждения верны для примера выше:

· A Deer IS-A Animal (олень - это животное);

· A Deer IS-A Vegetarian (олень - это вегетарианец);

· A Deer IS-A Deer (олень - это олень);

· A Deer IS-A Object (олень - это объект).

Когда мы применяем факты ссылочной переменной к ссылке на объект Deer (Олень), следующие утверждения верны:

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...