Материал: 8 - Презентация

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

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

Увеличение гибкости за счет интерфейсов

Преимущества:

•Код работает с объектами по интерфейсной ссылке

•Этот код может быть использован для работы с любыми объектами, реализующими этот интерфейс

•Более гибкий механизм (по сравнению с наследованием), но требует реализации интерфейса

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

Источник: https://studfile.net/preview/16403817/