Мультимедийный курс Программирование на Java Лекция

Скачать презентацию Мультимедийный курс Программирование на Java  Лекция Скачать презентацию Мультимедийный курс Программирование на Java Лекция

1_Lekz_04_JAVA2_Объектн_модель_ч3_2010.ppt

  • Количество слайдов: 23

> Мультимедийный курс Программирование на Java  Лекция 4. 3  Объектная модель JAVA Мультимедийный курс Программирование на Java Лекция 4. 3 Объектная модель JAVA (ч. 3) 1. Полиморфизм 2. Абстрактные методы и классы 3. Интерфейсы 4. Внутренние классы

>      Полиморфизм Ссылочной переменной суперкласса может быть назначена ссылка Полиморфизм Ссылочной переменной суперкласса может быть назначена ссылка на любой его подкласс // перем. подкласса Box. Weight weightbox = new Box. Weight(3, 7, 8. 37); Box plainbox = new Box(); // перем. суперкласса . . . plainbox = weightbox;

>       Полиморфизм  Доступ через сылочную переменную суперкласса Полиморфизм Доступ через сылочную переменную суперкласса к членам подкласса v возможен только к тем частям объекта- подкласса, которые определены суперклассом v если вызываемый метод определен и в суперклассе, и в подклассе, то вызываться будет метод подкласса vol= plainbox. volume() // определен в Box

>       Полиморфизм Пример: // Суперкласс - Figure x Полиморфизм Пример: // Суперкласс - Figure x = new Rect(10, 100, 200); Figure y = new Circle(10, 100); … x. print() // распечатается «Rect» y. print() // распечатается «Circle» // метод print есть и у суперкласса

>      Полиморфизм Оператор X instanceof Y  возвращает истину, Полиморфизм Оператор X instanceof Y возвращает истину, если § объект X относится к классу Y § расширяет класс Y § реализует интерфейс Y // Определение количества окружностей в массиве фигур int count. Circle = 0; for (int i = 0; i < figures. length; i++) { if (figures[i] instanceof Circle)

>      Полиморфизм  Раннее связывание - адрес вызываемого метода Полиморфизм Раннее связывание - адрес вызываемого метода определяется во время компиляции Позднее связывание - адрес вызываемого метода определяется в момент выполнения программы Спецификатор метода final – устанавливает раннее связывание и запрещает перекрытия

>   Абстрактные методы и классы  Абстрактный метод – структура некоторой абстракции Абстрактные методы и классы Абстрактный метод – структура некоторой абстракции без законченной реализации v Не имеет тела v Требует последующего переопределения (заполнения деталями) подклассами v Объявляется с помощью модификатора типа abstract Пример: abstract public void print();

>     Абстрактные методы и классы Абстрактный класс - класс, который Абстрактные методы и классы Абстрактный класс - класс, который имеет хотя бы один абстрактный метод Объявление abstract class <имя_класса>{ … } Нельзя !!! ü создавать экземпляры абстрактного класса с помощью операции new ü объявлять абстрактные конструкторы или абстрактные статические методы public static abstract String get. Description() {… }

>   Абстрактные методы и классы Абстрактный класс (продолжение) v Может использоваться для Абстрактные методы и классы Абстрактный класс (продолжение) v Может использоваться для создания ссылок на объекты подклассов Rectangle r = new Rectangle(9, 5); Figure figref; figref=r; … System. out. println("Площадь равна " + figref. Area());

>      Интерфейсы Интерфейс - это набор описаний констант и Интерфейсы Интерфейс - это набор описаний констант и абстрактных методов, объединенных общим предназначением v реализуется в классах (возможно, в нескольких) v может не иметь ни одного метода (используется как метка класса). v может наследовать другой интерфейс (допустимо множественное наследование)

>       Интерфейсы Определение интерфейса – осуществляется с использованием Интерфейсы Определение интерфейса – осуществляется с использованием ключевого слова interface [<модификатор>] interface <интерф. 1> [extends <интерф. 2>, <интерф. 3> …] { <описания_констант> <описания_абстр. _методов> }

>       Интерфейсы Методы интерфейса  по умолчанию public Интерфейсы Методы интерфейса по умолчанию public и abstract Поля интерфейса по умолчанию final, public и static public interface D { int k = 0; int get. K(); } public class C implements D { public int get. K() { return D. k++; }

>    Интерфейсы Реализация интерфейса осуществляется с помощью ключевого слова implements: [public] Интерфейсы Реализация интерфейса осуществляется с помощью ключевого слова implements: [public] class <имя_класса> [extends <имя_суперкл. >] implements <имя_интерф. 1> [, < имя_интерф. 2 > …] { … }

>      Интерфейсы Реализация интерфейса (продолжение) ü Все методы интерфейса Интерфейсы Реализация интерфейса (продолжение) ü Все методы интерфейса должны быть реализованы с уровнем доступа public ü Один класс может реализовать много интерфейсов ü Класс, который реализует производный интерфейс автоматически реализует и базовый

>     Интерфейсы Реализация интерфейса Примеры:  class Wind implements Instrument Интерфейсы Реализация интерфейса Примеры: class Wind implements Instrument { public void play(Note n) { System. out. println("Wind. play() " + n); } public String what() { return "Wind"; } public void adjust() {} // пустая реализация } class Brass extends Wind { public void play(Note n) { // перекрытие System. out. println("Brass. play() " + n); } public void adjust() { // перекрытие System. out. println("Brass. adjust()"); } }

>       Внутренние классы – это классы, определяемые внутри Внутренние классы – это классы, определяемые внутри другого класса (в т. ч. внутри его методов) v Известны только в пределах видимости включающего класса v Им доступны все члены включающего класса v Объект внутреннего класса нельзя создать, если нет объекта внешнего класса v Файл. class для внутреннего класса создается отдельно с именем <имя_внешн_кл. >$<имя_внутр_кл. >. class

>       Внутренние классы Пример:  class Outer. Class Внутренние классы Пример: class Outer. Class { public class Inner. Class { void fun() { System. out. println("Это метод внутреннего класса"); } } … }

>     Внутренние классы  Пример: создание и использование объекта внутреннего Внутренние классы Пример: создание и использование объекта внутреннего класса в методе включающего класса class Outer. Class { public class Inner. Class { void fun() { System. out. println("Вызван метод Inner. Class. fun()"); } } public void fun() { System. out. println("Вызван метод Outer. Class. fun()"); Inner. Class x = new Inner. Class(); x. fun(); } }

>      Внутренние классы  Создание объекта внутреннего класса за Внутренние классы Создание объекта внутреннего класса за пределами включающего - 1 -й способ 1) создание метода включающего класса : class Outer. Class { public class Inner. Class { … } Inner. Class class. Factory() { return new Inner. Class(); } } Такой проектный шаблон называют фабрикой классов

>       Внутренние классы  Создание объекта внутреннего класса Внутренние классы Создание объекта внутреннего класса за пределами включающего - 1 -й способ 2) Создается объект внешнего класса Outer. Class outer = new Outer. Class(); 3) Создается объект внутреннего класса (составное имя класса) Outer. Class. Inner. Class inner = outer. class. Factory();

>      Внутренние классы  Создание объекта внутреннего класса за Внутренние классы Создание объекта внутреннего класса за пределами включающего – 2 -ой способ С помощью расширенного синтаксиса оператора new: Outer. Class outer = new Outer. Class(); Outer. Class. Inner. Class inner = outer. new Inner. Class(); Ссылка из внутреннего класса на объект включающего класса <имя_включ_класса>. this

>     Внутренние классы Пример: реализация интерфейса закрытым внутренним классом, // Внутренние классы Пример: реализация интерфейса закрытым внутренним классом, // Интерфейс interface My. Interface { void fun(); } // Включающий класс class Outer. Class { // Закрытый внутренний класс private class Inner. Class implements My. Interface { public void fun() { System. out. println("This is Inner. Class. fun"); } } // Фабрика интерфейсов My. Interface class. Factory() { return (My. Interface) new Inner. Class(); }

>     Внутренние классы Статические вложенные классы v имеют модификатор static Внутренние классы Статические вложенные классы v имеют модификатор static v не могут обращаться к членам внешнего класса напрямую