Центрдистанционногообучения
Увеличение гибкости за счет интерфейсов
Преимущества:
•Код работает с объектами по интерфейсной ссылке
•Этот код может быть использован для работы с любыми объектами, реализующими этот интерфейс
•Более гибкий механизм (по сравнению с наследованием), но требует реализации интерфейса
26 online.mirea.ru
|
Центрдистанционногообучения |
А как же мешок картошки в гараже? |
|
|
|
interface Wheeled{} |
|
class Crossover implements Wheeled{} |
|
class Hatchback |
implements Wheeled{} |
class Trailer |
implements Wheeled{} |
class PotatoesBag {}; |
|
class Garage { |
|
private Object keepingThing; |
|
public Garage(Object keepingThing){ |
|
this.keepingThing = keepingThing; |
|
} |
|
public |
Object getKeepingThing(){ return keepingThing; } |
|
} |
{ |
|
class Man |
|
|
public |
static void main(String[] args) { |
|
Garage garage = new Garage (new PotatoesBag()); |
|
|
Object o = garage.getKeepingThing(); |
|
|
PotatoesBag bag; |
|
|
if |
(o instanceof PotatoesBag) bag = (PotatoesBag) o; |
|
} |
27 |
|
} |
online.mirea.ru |
|
|
|
|
Центрдистанционногообучения
Обобщения (generics)
•Позволяют указать «условный тип», с которым работает код
•Используются, когда один и тот же код применим к большому числу типов
•Позволяют повысить безопасность, за счет контроля типов на стадии компиляции программы, а не выполнения
•В основном используются контейнерами
•Всеинтерфейсыкласколлекцийделали параметризированными
28 online.mirea.ru
Центрдистанционногообучения
Занесем в гараж мешок с картошкой J
interface Wheeled{}
class Crossover implements Wheeled{}
class Hatchback |
implements Wheeled{} |
|
class |
Trailer |
implements Wheeled{} |
class |
PotatoesBag {}; |
|
class Garage<T> {
private T keepingThing;
public Garage(T keepingThing){ this.keepingThing = keepingThing; } public T getKeepingThing(){ return keepingThing; }
}
class Man {
public static void main(String[] args) {
|
Garage<Wheeled> garage = new Garage<Wheeled> (new Crossover()); |
|
Garage<PotatoesSack> anotherGarage = |
|
new Garage<PotatoesBag> (new PotatoesBag()); |
|
PotatoesBag bag = anotherGarage.getKeepingThing(); |
} |
} |
29 online.mirea.ru |
Центрдистанционногообучения
Обобщения (generics)
•Код работает только с тем типом, который указан в угловых скобках
•Позволяют создавать более компактный код, чем при использовании ссылок типа Object
•Обеспечиваютавтоматическуюпроверку приведениетипов
•Позволяют создавать хороший повторно используемый код
30 online.mirea.ru