Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
!!!!Шпоры орсп.doc
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
133.12 Кб
Скачать

9. Перегрузка, переопределение методов и их применение.

Java разрешает определение внутри одного класса двух или более методов с одним именем, если только объявления их параметров различны. В этом случае методы называют перегруженными, а процесс — перегрузкой методов. Перегрузка методов — один из способов поддержки полиморфизма в Java. Тем читателям, которые никогда не использовали язык, допускающий перегрузку методов, эта концепция вначале может показаться странной. Но, как вы вскоре убедитесь, перегрузка методов — одна из наиболее впечатляющих и полезных функциональных возможностей Java.

При вызове перегруженного метода для определения нужной версии Java использует тип и/или количество аргументов метода. Следовательно, перегруженные методы должны различаться по типу и/или количеству их параметров. Хотя возвращаемые типы перегруженных методов могут быть различны, самого возвращаемого типа не достаточно для различения двух версий метода. Когда Java встречает вызов перегруженного метода, она просто выполняет ту его версию, параметры которой соответствуют аргументам, использованным в вызове.

Использование полиморфизма при наследовании классов позволяет переопределять методы суперклассов их подклассами. Например, может возникнуть ситуация, когда все подклассы реализуют определенный метод из суперкласса, и лишь один подкласс должен иметь его другую реализацию. В таком случае метод переопределяется в подклассе

При наследовании все поля, методы базового класса переходят (наследуются) др. классом, но доступ к ним (базовым) может быть (public, friendly, protected), а может и не быть (private). Доступ из производного класса к полям и методам базового класса определяет специфика доступа к полю/методу , который указан в базовом классе.

10. Использование ключевого слова final при наследовании.

Ключевое слово final означает разные вещи при описании переменной, метода или класса. Финальное поле класса инициализируется при описании, или в конструкторе класса (а статичное поле — в статичном блоке инициализации) и дальше его значение не может быть изменено, Но при этом, их значения могут использоваться внутри анонимных классов

Метод класса, отмеченный словом final, не может быть переопределён при наследовании. Финальный класс не может иметь наследников вообще.

  • Ключевое слово final имеет три применения. Первое — его можно использовать для создания эквивалента именованной константы. Два других применения final связаны с наследованием.

  • Чтобы отменить переопределение метода, укажите модификатор final в начале его объявления. Методы, объявленные как final, не могут переопределяться.

class A {

final void meth() {

System.out.println("Это метод final.");

} }

class В extends A {

void meth() { // ОШИБКА! Нельзя переопределять.

System.out.println("Ошибка!");

} }

  • Поскольку meth объявлен как final, он не может быть переопределен в классе B. Если вы попытаетесь сделать это, то получите ошибку во время компиляции.

  • Иногда нужно разорвать наследственную связь классов (отменить наследование одного класса другим). Чтобы сделать это, предварите объявление класса ключевым словом final, что позволит неявно объявить и все его методы. Недопустимо объявлять класс одновременно как abstract и final.

final class A { // ...}

// Следующий класс незаконный.

class В extends А { //ОШИБКА! В не может быть подклассом А

// .. . }

  • Комментарий здесь означает, что в не может наследовать А, т.к. А объявлен как final.