Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Презентации и задания для практики NetCracker / Лекции / 04. Lскл чительнvе ситуации. =аследование.ppt
Скачиваний:
62
Добавлен:
08.06.2015
Размер:
668.67 Кб
Скачать

Забавный пример

class SuperShow {

public String str = "SuperStr";

public void show() { System.out.println("Super.show(): " + str);

}

}

class ExtendShow extends SuperShow { public String str = "ExtendStr";

public void show() {

System.out.println("Extend.show(): " + str);

}

}

31

И его результат

public static void main(String[] args) { ExtendShow ext = new ExtendShow(); SuperShow sup = ext; System.out.println("ext.str = " + ext.str); System.out.println("sup.str = " + sup.str); ext.show();

sup.show();

}

ext.str = ExtendStr sup.str = SuperStr Extend.show(): ExtendStr Extend.show(): ExtendStr

32

Совпадение имен методов в родительском и дочернем классах

Сигнатуры различны

Перегрузка – добавляется метод с другими параметрами

Сигнатуры совпадают

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

33

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

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

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

Уровень доступа к методу при переопределении не может сужаться

Методы private не переопределяются

34

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

class ParentClass {

public String getInfo() { return "parent"; }

}

class ChildClass extends ParentClass { public String getInfo() { return "child"; }

}

ChildClass child = new ChildClass(); System.out.println(child.getInfo()); // child

ParentClass parent = child; System.out.println(parent.getInfo()); // а тут?

35

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

class ParentClass {

private String getInfo() { return "parent"; }

}

public static void main(String[] args) { Parent object = new Child(); object.getInfo(); // а тут?

}

class ChildClass extends ParentClass {

// это не переопределенный метод!

public String getInfo() { return "child"; }

}

36

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

В предложении throws дочернего метода не может быть типов исключений, которые не совместимы с типами в throws базового метода (для checked исключений)

Переопределенный метод может быть снабжен модификатором abstract

Признаки synchronized, native и strictfp могут изменяться произвольно

37

Сокрытие полей

Поля не переопределяются, но скрываются

Тип поля при сокрытии можно изменить

Поле базового класса при сокрытии продолжает существовать, но недоступно через ссылку типа потомка, однако доступно по ссылке предка

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

Имеет право на существование следующая конструкция:

(VeryBaseClass) this

38

Еще пример

class SuperShow {

public String str = "SuperStr";

...

}

class ExtendShow extends SuperShow { public int str = 100500;

...

}

39

И его результат

public static void main(String[] args) { ExtendShow ext = new ExtendShow(); SuperShow sup = ext;

System.out.println("ext.str = " + ext.str); System.out.println("sup.str = " + sup.str); System.out.println("sup.str = " +

((SuperShow)ext).str);

}

ext.str = 100500 sup.str = SuperStr sup.str = SuperStr

40