
3-й семестр / Лекции / 4 - Презентация 2 - ООП
.pdf
Центр дистанционного обучения
Интерфейсы
Интерфейсы могут иметь описания полей, но это могут быть только описания констант (компилятор автоматически добавляет 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