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

Содержание

Слайд 2

Абстрактные классы Класс объявленный со спецификатором abstract Может содержать абстрактные методы

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

Класс объявленный со спецификатором abstract
Может содержать абстрактные методы (методы без

реализации).
abstract class A {
abstract void m();
}
Слайд 3

Свойства абстрактного класса Нельзя создать экземпляр, но можно объявить переменную данного

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

Нельзя создать экземпляр, но можно объявить переменную данного типа
Может

иметь конструкторы
Может содержать обычные методы
Слайд 4

Предназначение абстрактных классов Интерфейс к семейству классов. База для реализации полиморфизма.

Предназначение абстрактных классов
Интерфейс к семейству классов.
База для реализации полиморфизма.
Неабстрактные потомки обязаны

реализовать абстрактные методы.
Слайд 5

Абстрактный метод Метод, который не содержит реализации. Обязан быть объявлен со

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

Метод, который не содержит реализации.
Обязан быть объявлен со спецификатором
abstract
public abstract

void m();
Слайд 6

Вложенные классы Элементы класса статические нестатические Локальные анонимные с указанием имени

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

Элементы класса
статические
нестатические
Локальные
анонимные
с указанием имени

Слайд 7

Примеры классов class A { // класс верхнего уровня void m(SomeClass

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

class A { // класс верхнего уровня
void m(SomeClass p) {…}
class

B {} // класс элемент класса
void m() {
class C {} // С – локальный класс
m(new SomeClass() { // ан. класс
});
}
}
Слайд 8

Классы - элементы классов Могут иметь модификаторы/спецификаторы: abstract static final private/protected/default/public

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

Могут иметь модификаторы/спецификаторы:
abstract
static
final
private/protected/default/public

Слайд 9

Локальные классы Классы, объявленные внутри методов, конструкторов, блоках инициализации. Могут быть:

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

Классы, объявленные внутри методов, конструкторов, блоках инициализации.
Могут быть: abstract, final
Уровень

доступа - default, по умолчанию, ограничен телом блока, в котором объявлен класс.
Слайд 10

Анонимные классы Класс, который не имеет имени. Всегда расширяет класс или

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

Класс, который не имеет имени.
Всегда расширяет класс или реализует интерфейс.
Используется

при создании объектов.
Слайд 11

Пример анонимного класса class T {} T t = new T()

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

class T {}
T t = new T() {
void m()

{...}
}
t - переменная типа T, кот. ссылается на экземпляр анонимного класса, наследованного от T.
Слайд 12

Свойства вложенных классов Не могут объявлять статических полей (кроме констант), методов

Свойства вложенных классов

Не могут объявлять статических полей (кроме констант), методов и

классов (но могут наследовать их.
Имеют доступ к элементам внешнего класса.
Имеют доступ к локальным переменным и параметрам метода (они должны быть объявлены как final).
Слайд 13

Создание объектов внутреннего класса (нестатические элементы классов) Расширенный синтаксис оператора new

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

(нестатические элементы классов)
Расширенный синтаксис оператора new
class A {
class

B {}
}
A a = new A();
A.B b = a.new B();
Слайд 14

Создание объектов вложенных статических классов class A { static class B

Создание объектов вложенных статических классов
class A {
static class B {}
}
A.B b

= new A.B();
Слайд 15

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

Доступ к объекту внешнего класса (this) из внутреннего
class A {
private int

x;
class B {
int x = A.this.x;
}
}
Слайд 16

Имя файла с байт-кодом вложенного класса Для каждого класса компилятор (javac) создает отдельный файл класса. Outer$Inner.class

Имя файла с байт-кодом вложенного класса
Для каждого класса компилятор (javac) создает

отдельный файл класса.
Outer$Inner.class
Слайд 17

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

Интерфейсы

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

сторона.
Слайд 18

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

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

Класс может реализовывать интерфейс
Можно объявить интерфейсную переменную
Интерфейс может наследовать несколько

других интерфейсов
Слайд 19

Элементы интерфейса поля (public static final) методы (public abstract) интерфейсы (public

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

поля (public static final)
методы (public abstract)
интерфейсы (public static)
классы (public static)
Указанные

модификаторы и спецификаторы можно не ставить.
Слайд 20

Поля интерфейса константы (final) статические (static) публичные (public) должны быть проинициализированы при объявлении

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

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

Слайд 21

Методы интерфейса абстрактные (abstract) публичные (public)

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

абстрактные (abstract)
публичные (public)

Слайд 22

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

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

Слайд 23

Множественное наследование интерфейсов interface Interf extends Interf1, Interf2 { ... }

Множественное наследование интерфейсов
interface Interf extends Interf1, Interf2 {
...
}

Слайд 24

Реализация интерфейса class A implements Interf1, Interf2 { ... }

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

class A implements Interf1, Interf2 {
...
}

Слайд 25

Реализация интерфейсов и расширение класса class A extends B implements Interf1, Interf2 { ... }

Реализация интерфейсов и расширение класса
class A extends B implements Interf1, Interf2

{
...
}
Слайд 26

Оператор instanceof для интерфейсов interface I {} class A implements I

Оператор instanceof для интерфейсов
interface I {}
class A implements I {}
...
boolean f

= new A() instanceof I; // f = true