Абстрактные классы, интерфейсы. Вложенные классы, анонимные, локальные.
Абстрактные классы
Свойства абстрактного класса
Предназначение абстрактных классов
Абстрактный метод
Вложенные классы
Примеры классов
Классы - элементы классов
Локальные классы
Анонимные классы
Пример анонимного класса
Свойства внутренних классов
Создание объектов внутреннего класса
Создание объектов вложенных статических классов
Доступ к объекту внешнего класса (this) из внутреннего
Имя файла с байт-кодом вложенного класса
Интерфейсы
Использование интерфейсов
Элементы интерфейса
Поля интерфейса
Методы интерфейса
Вложенные классы и интерфейсы- элементы интерфейсов
Множественное наследование интерфейсов
Реализация интерфейса
Реализация интерфейсов и расширение класса
Оператор instanceof для интерфейсов
Частичная реализация интерфейса
99.09K
Category: programmingprogramming

Абстрактные классы, интерфейсы. Вложенные классы, анонимные, локальные

1. Абстрактные классы, интерфейсы. Вложенные классы, анонимные, локальные.

АБСТРАКТНЫЕ КЛАССЫ,
ИНТЕРФЕЙСЫ. ВЛОЖЕННЫЕ
КЛАССЫ, АНОНИМНЫЕ,
ЛОКАЛЬНЫЕ.

2. Абстрактные классы

Класс объявленный со спецификатором
abstract
Может содержать абстрактные методы
(методы без реализации).
abstract class A {
abstract void m();
}
Kolesnikov D.O. SED KNURE
2

3. Свойства абстрактного класса

Нельзя создать экземпляр, но можно
объявить переменную данного типа
Может иметь конструкторы
Может содержать обычные методы
Kolesnikov D.O. SED KNURE
3

4. Предназначение абстрактных классов

Интерфейс к семейству классов.
База для реализации полиморфизма.
Неабстрактные потомки обязаны
реализовать абстрактные методы.
Kolesnikov D.O. SED KNURE
4

5. Абстрактный метод

Метод, который не содержит реализации.
Обязан быть объявлен со спецификатором
abstract
public abstract void m();
Kolesnikov D.O. SED KNURE
5

6. Вложенные классы

Элементы класса
статические
нестатические
Локальные
анонимные
с указанием имени
Kolesnikov D.O. SED KNURE
6

7. Примеры классов

class A { // класс верхнего уровня
void m(SomeClass p) {…}
class B {} // класс элемент класса
void m() {
class C {} // С – локальный класс
m(new SomeClass() { // ан. класс
});
}
}
Kolesnikov D.O. SED KNURE
7

8. Классы - элементы классов

Могут иметь модификаторы/спецификаторы:
abstract
static
final
private/protected/default/public
Kolesnikov D.O. SED KNURE
8

9. Локальные классы

Классы, объявленные внутри методов,
конструкторов, блоках инициализации.
Могут быть: abstract, final
Уровень доступа - default, по умолчанию,
ограничен телом блока, в котором
объявлен класс.
Kolesnikov D.O. SED KNURE
9

10. Анонимные классы

Класс, который не имеет имени.
Всегда расширяет класс или реализует
интерфейс.
Используется при создании объектов.
Kolesnikov D.O. SED KNURE
10

11. Пример анонимного класса

class T {}
T t = new T() {
void m() {...}
}
t - переменная типа T, кот. ссылается на
экземпляр анонимного класса,
наследованного от T.
Kolesnikov D.O. SED KNURE
11

12. Свойства внутренних классов

Не могут объявлять статических полей
(кроме констант), методов и классов (но
могут наследовать их.
Имеют доступ к элементам внешнего
класса.
Имеют доступ к локальным переменным и
параметрам метода (они должны быть
объявлены как final).
Kolesnikov D.O. SED KNURE
12

13. Создание объектов внутреннего класса

(нестатические элементы классов)
Расширенный синтаксис оператора new
class A {
class B {}
}
A a = new A();
A.B b = a.new B();
Kolesnikov D.O. SED KNURE
13

14. Создание объектов вложенных статических классов

class A {
static class B {}
}
A.B b = new A.B();
Kolesnikov D.O. SED KNURE
14

15. Доступ к объекту внешнего класса (this) из внутреннего

class A {
private int x;
class B {
int x = A.this.x;
}
}
Kolesnikov D.O. SED KNURE
15

16. Имя файла с байт-кодом вложенного класса

Для каждого класса компилятор (javac)
создает отдельный файл класса.
Outer$Inner.class
Kolesnikov D.O. SED KNURE
16

17. Интерфейсы

Определяют границы взаимодействия
между объектами.
Определяют абстракцию, реализацию
которой предоставляет
имплементирующая интерфейс сторона.
Kolesnikov D.O. SED KNURE
17

18. Использование интерфейсов

Класс может реализовывать интерфейс
Можно объявить интерфейсную
переменную
Интерфейс может наследовать несколько
других интерфейсов
Kolesnikov D.O. SED KNURE
18

19. Элементы интерфейса

поля (public static final)
методы (public abstract)
интерфейсы (public static)
классы (public static)
Указанные модификаторы и спецификаторы
можно не ставить.
Kolesnikov D.O. SED KNURE
19

20. Поля интерфейса

константы (final)
статические (static)
публичные (public)
должны быть проинициализированы при
объявлении
Kolesnikov D.O. SED KNURE
20

21. Методы интерфейса

абстрактные (abstract)
публичные (public)
Kolesnikov D.O. SED KNURE
21

22. Вложенные классы и интерфейсы- элементы интерфейсов

Вложенные классы и интерфейсыэлементы интерфейсов
Статические
Kolesnikov D.O. SED KNURE
22

23. Множественное наследование интерфейсов

interface Interf extends Interf1, Interf2 {
...
}
Kolesnikov D.O. SED KNURE
23

24. Реализация интерфейса

class A implements Interf1, Interf2 {
...
}
Kolesnikov D.O. SED KNURE
24

25. Реализация интерфейсов и расширение класса

class A extends B implements Interf1, Interf2 {
...
}
Kolesnikov D.O. SED KNURE
25

26. Оператор instanceof для интерфейсов

interface I {}
class A implements I {}
...
boolean f = new A() instanceof I; // f = true
Kolesnikov D.O. SED KNURE
26

27. Частичная реализация интерфейса

interface I {
void m();
void m2();
}
// ошибка компиляции, A is not abstract!
class A implements I {
public void m() {}
}
Kolesnikov D.O. SED KNURE
27
English     Русский Rules