다음 요구사항에 맞게 프로그램을 구현
요구사항
- 드론(Drone), 비행기(Airplane), 기차(Train), 버스(Bus), 전동킥보드(Kickboard) 클래스를 준비
- 드론과 전동킥보드는 전기로 움직이는 전자제품(Electronic) 입니다.
- 전자제품은 반드시 전원을 켜고(on) 끄는(off) 기능이 있어야 합니다.
- 메세지는 단순 텍스트 메세지로 출력하도록 구현합니다(ex : OOO의 전원을 켭니다 / 끕니다)
- 드론, 버스, 비행기, 기차, 전동킥보드는 이동수단(Transportation) 입니다.
- 이동수단은 반드시 이동(move) 기능이 있어야 합니다.
- 메세지는 단순 텍스트 메세지로 출력하도록 구현합니다(ex : OOO가 이동합니다)
- 드론과 비행기는 비행이 가능(Flyable)한 공통점이 있습니다
- 비행이 가능한 물체들은 반드시 비행(fly) 기능이 있어야 합니다.
- 메세지는 단순 텍스트 메세지로 출력하도록 구현합니다(ex : OOO가 비행합니다)
- 비행기, 기차는 예약이 가능한(Reserve) 공통점이 있습니다
- 예약이 가능한 객체들에는 반드시 예약(reservation)이라는 기능이 있어야 합니다
- 메세지는 단순 텍스트 메세지로 출력하도록 구현합니다(ex : OOO를 예약합니다)
- 모든 일반 클래스의 객체를 만들어서 이용 가능한 기능을 호출해보세요
** 분석
1) 전자제품(Electric)을 상속 : 드론(Drone), 전동킥보드(Kickboard)
2) 교퉁수단(Transportation)을 상속 : 모두 다
3) 비행(Flyable)을 상속 : 드론(Drone), 비행기(Plane)
4) 예약(Reserve)를 상속 : 비행기(Airplane), 기차(Train)
Electric 인터페이스
package day13_oop.multi2;
public interface Electric {
// 멤버 필드
// 생성자
// 메소드
// 추상 메소드 - public abstract를 자동생성하므로 입력할 필요가 없다
void on();
void off();
}
Transportation 인터페이스
package day13_oop.multi2;
public interface Transportation {
// 멤버 필드
// 생성자
// 메소드
// 추상 메소드 - public abstract를 자동생성하므로 입력할 필요가 없다
void move();
}
Flyable 인터페이스
package day13_oop.multi2;
public interface Flyable {
// 멤버 필드
// 생성자
// 메소드
// 추상 메소드 - public abstract를 자동생성하므로 입력할 필요가 없다
void fly();
}
Reserve 인터페이스
package day13_oop.multi2;
public interface Reserve {
// 멤버 필드
// 생성자
// 메소드
// 추상 메소드 - public abstract를 자동생성하므로 입력할 필요가 없다
void reservation();
}
Drone 클래스
package day13_oop.multi2;
public class Drone implements Electric, Transportation, Flyable {
// 멤버 필드
// 생성자
// 메소드
// 추상메소드 오버라이딩
@Override
public void fly() {
System.out.println("드론이 비행합니다");
}
@Override
public void move() {
System.out.println("드론이 이동합니다");
}
@Override
public void on() {
System.out.println("드론의 전원을 켭니다");
}
@Override
public void off() {
System.out.println("드론의 전원을 끕니다");
}
}
Airplane 클래스
package day13_oop.multi2;
public class Airplane implements Transportation, Flyable, Reserve {
// 멤버 필드
// 생성자
// 메소드
// 추상메소드 오버라이딩
@Override
public void reservation() {
System.out.println("비행기를 예약합니다");
}
@Override
public void fly() {
System.out.println("비행기가 비행합니다");
}
@Override
public void move() {
System.out.println("비행기가 이동합니다");
}
}
Train 클래스
package day13_oop.multi2;
public class Train implements Transportation, Reserve {
// 멤버 필드
// 생성자
// 메소드
// 추상메소드 오버라이딩
@Override
public void reservation() {
System.out.println("기차를 예약합니다");
}
@Override
public void move() {
System.out.println("기차가 이동합니다");
}
}
Bus 클래스
package day13_oop.multi2;
public class Bus implements Transportation {
// 멤버 필드
// 생성자
// 메소드
// 추상메소드 오버라이딩
@Override
public void move() {
System.out.println("버스가 이동합니다");
}
}
Kickboard 클래스
package day13_oop.multi2;
public class Kickboard implements Electric, Transportation {
// 멤버 필드
// 생성자
// 메소드
// 추상메소드 오버라이딩
@Override
public void move() {
System.out.println("전동킥보드가 이동합니다");
}
@Override
public void on() {
System.out.println("전동킥보드의 전원을 켭니다");
}
@Override
public void off() {
System.out.println("전동킥보드의 전원을 끕니다");
}
}
** Java에서는 원칙적으로 다중상속을 금지하기 때문에
하나의 슈퍼 클래스만을 상속하고 나머지는 인터페이스를 통해 다중 상속을 구현한다