// Device.java
public interface Device {
void charge();
void music();
void video();
void game();
}
// Smartphoneable.java
public interface Smartphoneable extends Device {
void call();
}
// Tabletable.java
public interface Tabletable extends Device {
}
// GalaxyNote.java
public class GalaxyNote implements Smartphoneable {
@Override
public void call() {
System.out.println("[GALAXY_NOTE]: Call via SIM card");
}
@Override
public void music() {
System.out.println("[GALAXY_NOTE]: listen music via Yandex music");
}
@Override
public void video() {
System.out.println("[GALAXY_NOTE]: watch video via Rutube");
}
@Override
public void game() {
System.out.println("[GALAXY_NOTE]: play Mario game");
}
@Override
public void charge() {
System.out.println("[GALAXY_NOTE]: I will charge for 30 mins");
}
}
// IPad.java
public class IPad implements Tabletable {
@Override
public void charge() {
System.out.println("[IPAD]: I will charge for 1 hour");
}
@Override
public void music() {
System.out.println("[IPAD]: listen music via Apple music");
}
@Override
public void video() {
System.out.println("[IPAD]: watch video via Youtube");
}
@Override
public void game() {
System.out.println("[IPAD]: play game via Apple Arcade");
}
}
// IPhone.java
public class IPhone implements Smartphoneable {
@Override
public void call() {
System.out.println("[IPHONE]: Call via SIM card");
}
@Override
public void music() {
System.out.println("[IPHONE]: listen music via Yandex music");
}
@Override
public void video() {
System.out.println("[IPHONE]: watch video via Rutube");
}
@Override
public void game() {
System.out.println("[IPHONE]: play Mario game");
}
@Override
public void charge() {
System.out.println("[IPHONE]: I will charge for 30 mins");
}
}
Пример использования подтипов:
// Example.java
public class Example {
public static void main(String[] args) {
Device ipad = new IPad();
Device iphone = new IPhone();
Device galaxyNote = new GalaxyNote();
for (Device device: List.of(ipad, iphone, galaxyNote)) {
device.game();
}
// 1
List.of(ipad, iphone, galaxyNote).stream()
.filter(device -> device instanceof Smartphoneable)
.map(device -> (Smartphoneable) device)
.forEach(Smartphoneable::call);
//2
for (Device device: List.of(ipad, iphone)) {
if (device instanceof Smartphoneable) {
((Smartphoneable) device).call();
}
}
}
}
Дополнительные материалы
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты
Для полного доступа к курсу нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.