Центрдистанционногообучения
Пример
class Crossover {}
class Garage {
private Crossover parkedAuto;
public Garage(Crossover parkedAuto) { this.parkedAuto = parkedAuto;
}
public Crossover getParkedAuto(){ return parkedAuto;}
}
class Man {
public static void main(String[] args) {
Garage garage = new Garage (new Crossover());
}
}
21 online.mirea.ru
Центрдистанционногообучения
Проблемы
• Обычные классы и методы работаю с конкретными типами (примитивы или классы)
• Что делать, если нужно работать с разнообразными типами?
• Не писать же один и тот же код для каждого возможного типа…
22 online.mirea.ru
Центрдистанционногообучения
Пример иерархии типов
class Auto {} |
|
||
А как же хэтчбэк? |
|||
class |
Crossover extends Auto{} |
||
class |
Hatchback extends Auto{} |
|
|
|
|||
class Garage {
private Auto parkedAuto;
public Garage(Auto parkedAuto) { //конструктор this.parkedAuto = parkedAuto;
}
public Auto getParkedAuto(){ return parkedAuto;}
} |
|
|
class Main { |
|
|
|
public static void main(String[] args) { |
|
|
Garage garage = new Garage (new Crossover()); |
|
|
Garage anotherGarage = new Garage (new Hatchback()); |
|
} |
} |
|
23 |
online.mirea.ru |
|
|
|
|
Центрдистанционногообучения
Увеличение гибкости за счет наследования
•Код работает с объектами по ссылке на базовый тип.
•Этот код может быть использован для работы с производными типами.
•Достигаемая гибкость работает только в пределах одной иерархии (наследования)
24 online.mirea.ru
Центрдистанционногообучения
А как же прицеп?
interface Wheeled{} //общийинтерфейс class Crossover implements Wheeled{}
class |
Hatchback |
implements |
Wheeled{} |
class |
Trailer |
implements |
Wheeled{} |
class Garage {
private Wheeled parkedThing;
public Garage(Wheeled parkedThing){this.parkedThing = parkedThing;} public Wheeled getParkedThing(){ return parkedThing;}
}
class Main {
public static void main(String[] args) {
Garage garage = new Garage (new Crossover()); Garage anotherGarage = new Garage (new Trailer());
}
}
25 online.mirea.ru