Добавил:
ПОИТ 2016-2020 Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Пацей 4 сем / Лекции / СТПI_2_ООП

.pdf
Скачиваний:
70
Добавлен:
29.04.2018
Размер:
15.18 Mб
Скачать

Правила использования

Доступ к элементам внутреннего класса возможен из внешнего только через объект внутреннего класса

Методы внутреннего класса имеют прямой доступ ко всем полям и методам внешнего класса

Внутренние классы не могут содержать статические атрибуты и методы, кроме констант (final static).

Внутренние классы имеют право наследовать другие классы, реализовывать интерфейсы и выступать в роли объектов наследования

public class OneDayCard extends DebetCatd {

 

protected class SpecialDogovor extends Dogovor {

 

}

}

public class SuperDogovor extends DebetCatd.Dogovor {

 

public SuperDogovor(DebetCatd obj) {

 

obj.super();

 

}

 

}

Вложенные (nested) классы

Статический внутренний класс логически связанный с классом-владельцем называется вложенным (nested).

Если класс вложен в интерфейс, то он становится статическим по умолчанию

public class DebetCatd {

private Dogovor dog;

// abstract, final, private, protected - допустимы

public static class Dogovor { // определение вложенного класс // поля и методы

public static void sign() { System.out.println("Подписание");

}

public void read() { System.out.println("Чтение");

}

}

public static void main(String[] args) { Dogovor.sign();

DebetCatd.Dogovor s123 = new DebetCatd.Dogovor(); s123.read();

}

Правила использования

1)Может наследовать другие классы, реализовывать интерфейсы и являться объектом наследования.

2)Для доступа к нестатическим членам и методам внешнего класса должен создавать

объект внешнего класса.

3) Имеетдоступ только к статическим полям и методам внешнего класса.

4) Для создания объекта вложенного класса объект внешнего класса создавать не надо.

Анонимные (anonymous) классы

Анонимные (безымянные) классы применяются для придания уникальной функциональности отдельно взятому экземпляру, для обработки событий, реализации блоков прослушивания, реализации интерфейсов, запуска

потоков и т. д.

public class WrapperString {

private String str;

public WrapperString(String str) { this.str = str; }

public String getStr() { return str;

}

public void replace() { // замена всех символа

System.out.println("Все заменяю");

}

}

class Test {

public static void main(String[ ] args) {

String ob = "ABC";

// анонимный класс

WrapperString anonimObj = new WrapperString(ob) {

// замена последего символа

@Override

public void replace() {

System.out.println("Заменяю последний");

}

}; // конец объявления анонимного класса

WrapperString anonim2Obj = new WrapperString(ob) {

// анонимный класс private int position = 2; // собственное поле

// собственный метод public int test() {

return this.getStr().length();

}

}; //конец объявления анонимного класса

anonimObj.replace(); //заменяю последний anonim2Obj.replace(); // все заменяю

Анонимные допускают вложенность друг в друга (не используется)

Конструктор определить (переопределить) невозможно

Объявление одновременно с созданием объекта

Интерфейсы

Виды:

интерфейсы, определяющие функциональность для классов

интерфейсы, придающие классу определенные свойства (Cloneable,

Serializable)

[public] interface Имя

[extends Имя1, Имя2,…, ИмяN] { /**/}

Соседние файлы в папке Лекции