Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
samples / Stacionar / _ООП / ООП_шпоры.doc
Скачиваний:
43
Добавлен:
25.03.2015
Размер:
74.24 Кб
Скачать

9. Перегрузка и переопределение членов класса.

Переопределением метода называется объявление в подклассе метода, у которого имя, тип и список параметров, в точности совпадают с соответствующими атрибутами метода, ранее объявленного в суперклассе.

При переопределении метода использование модификаторов доступа должно удовлетворять следующим условиям:

  • если переопределяемый метод суперкласса не содержит ни одного из модификаторов доступа public, protected или private, то переопределяющий метод не должен иметь модификатора private.

  • если переопределяемый метод суперкласса имеет модификатор доступа protected, то переопределяющий метод должен иметь модификатор доступа public или protected.

  • если переопределяемый метод суперкласса имеет модификатор доступа public, то переопределяющий метод должен также иметь модификатор доступа public.

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

Если класс содержит переопределяющий метод, то переопределенный метод можно вызвать только с квалификацией ссылки ключевым словом super или именем суперкласса (для статических членов).

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

class A {

public void Metod1() { }

public static void Metod2() { }

}

class B extends A {

publicMetod1() { }

...

Metod1(); // Вызов метода из классаB

super.Metod1(); // Вызов метода из классаA

A.Metod2();

}

Перегружаемыми методаминазывается группа методов с одинаковым именем, но различными списками параметров. Язык Java позволяет определять в классах перегружаемые методы.

Пример перегрузки метода myPrint:

public class MyClass2 {

private String str1;

public MyClass2() {

super();

str1 = "String";

myPrint(str1);

myPrint(str1, 10);

}

private void myPrint(int i){

System.out.println(i);

}

private void myPrint(String s){

System.out.println(s);

}

private void myPrint(String s, int i){

System.out.println(s);

System.out.println(i);

}

}