Similar presentations:
Абстрактные классы, интерфейсы. Вложенные классы, анонимные, локальные
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