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












![Интерфейсы Реализация интерфейса осуществляется с помощью ключевого слова implements: [public] Интерфейсы Реализация интерфейса осуществляется с помощью ключевого слова implements: [public]](https://present5.com/presentation/3/159287660_332559367.pdf-img/159287660_332559367.pdf-13.jpg)











1_Lekz_04_JAVA2_Объектн_модель_ч3_2010.ppt
- Количество слайдов: 23
Мультимедийный курс Программирование на 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 = new Rect(10, 100, 200); Figure y = new Circle(10, 100); … x. print() // распечатается «Rect» y. print() // распечатается «Circle» // метод print есть и у суперкласса
Полиморфизм Оператор 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 Может использоваться для создания ссылок на объекты подклассов 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 и 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] class <имя_класса> [extends <имя_суперкл. >] implements <имя_интерф. 1> [, < имя_интерф. 2 > …] { … }
Интерфейсы Реализация интерфейса (продолжение) ü Все методы интерфейса должны быть реализованы с уровнем доступа public ü Один класс может реализовать много интерфейсов ü Класс, который реализует производный интерфейс автоматически реализует и базовый
Интерфейсы Реализация интерфейса Примеры: 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 { 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 не могут обращаться к членам внешнего класса напрямую