Добавил:
Rumpelstilzchen2018@yandex.ru Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

3-й семестр / Лекции / 4 - Презентация 2 - ООП

.pdf
Скачиваний:
65
Добавлен:
25.12.2020
Размер:
596.48 Кб
Скачать

Центр дистанционного обучения

Интерфейсы

Интерфейсы могут иметь описания полей, но это могут быть только описания констант (компилятор автоматически добавляет public static final):

public interface CanFly {

int DEFAULT_WINGS_COUNT = 2;

int getWingsCount();

}

online.mirea.ru

Центр дистанционного обучения

Интерфейсы

Интерфейсы могут иметь реализацию методов по умолчанию:

public interface CanFly {

int DEFAULT_WINGS_COUNT = 2;

default int getWingsCount() { return DEFAULT_WINGS_COUNT;

}

}

online.mirea.ru

Центр дистанционного обучения

Интерфейсы

public class Bird implements CanFly {

//Можно не реализовывать метод getWingsCount

//У него есть реализация по умолчанию

}

Это возвращает нас к проблеме ромбовидного наследования!

online.mirea.ru

Центр дистанционного обучения

Интерфейсы

public interface Animal { String talk(); } public interface Dog extends Animal { default String talk() { return “Гав”; }

}

public interface Cat extends Animal { default String talk() { return “Мяу”; }

}

public class Hybrid implements Dog, Cat {

}

online.mirea.ru

Центр дистанционного обучения

Интерфейсы

Hybrid zver = new Hybrid();

System.out.println(zver.talk());

На самом деле класс Hybrid не скомпилируется. Если класс наследует несколько реализаций метода по умолчанию из разных интерфейсов, компилятор игнорирует эти реализации по умолчанию и заставляет класс реализовать этот метод самому.

online.mirea.ru

Центр дистанционного обучения

Интерфейсы

Интерфейсы могут также иметь статические методы: public interface CanTalk {

String getWord();

//для интерфейсов модификатор

//public по умолчанию

static String getSilence() { return “”;

}

}

online.mirea.ru

Центр дистанционного обучения

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

Как классы, так и интерфейсы могут иметь вложенные классы:

package ru.mirea.example; public class Shape {

public static class Point { private double x; private double y;

}

private Point location;

}

online.mirea.ru

 

Центр дистанционного обучения

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

Статические вложенные классы практически ничем не отличаются от классов верхнего уровня. Отличия:

Имя вложенного класса содержит имя объемлющего класса, в который он вложен:

полное имя класса ru.mirea.example.Shape.Point

простое имя класса Shape.Point

Приватные поля и методы вложенного класса Point доступны из объемлющего класса Shape.

Shape.Point p1 = new Shape.Point(1, 2);

online.mirea.ru

Центр дистанционного обучения

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

Не-статические вложенные классы используются

редко:

public class Shape { public class Point { private double x; private double y;

}

private Point location;

}

online.mirea.ru

Центр дистанционного обучения

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

Не-статические вложенные классы транслируются компилятором в статические следующим образом:

public class Shape {

public class Point {

private Shape this$0; // Добавляется компилятором

private double x;

private double y;

}

private Point location;

}

online.mirea.ru