본문 바로가기

국비교육/국비교육 복습

day13_oop.multi2 : 인터페이스를 이용한 다중 상속 구현 (★)

다음 요구사항에 맞게 프로그램을 구현

요구사항

  • 드론(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에서는 원칙적으로 다중상속을 금지하기 때문에

   하나의 슈퍼 클래스만을 상속하고 나머지는 인터페이스를 통해 다중 상속을 구현한다