[JAVA] 인터페이스 연습문제

JoJo·2023년 7월 5일
0
post-custom-banner

💡 문제 1.

핸드폰 로고 출력


✔️ 소스코드

* 인터페이스

package com.kh.day08.oop.interfacepkg;

public interface PhoneInterface {
	// 1. Illegal modifier for the interface field PhoneInterface.NAME; 
	// only public, static & final are permitted 
    // => 외부로 공개되는 메소드를 정의하는 것인데 private 객체를 선언 했기 때문에 발생
    // => private을 public, static & final 수정-
   
	// 2. The blank final field NAME may not have been initialized 
    // => 초기화해야 사용 가능함.
	// static final -> 생략 가능
	public static final String NAME = "";
	public static final int TIME_OUT = 10000;
	
	public abstract void receiveCall();
	// 3. Abstract methods do not specify a body 
    // => 몸체({} 중괄호) 사용불가 
    // => {} 삭제하고, ; 작성
    
	void sendCall();
	abstract void printLogo();
	public default void showLogo() {
		// 디폴트 메소드
		// 하위 호환성을 위해서 작성함
		// 하위 호환성을 유지하고 인터페이스의 보완을 위해 작성
		System.out.println("** LG **");
	}
}
* 실체클래스(자식클래스) - 인터페이스를 상속받음

package com.kh.day08.oop.interfacepkg;

// 1. The type SamsungPhone must implement the inherited abstract method PhoneInterface.
// => receiveCall() -> interface 상송받을때는 extends가 아닌 implements 사용!
public class SamsungPhone implements PhoneInterface {
	// 2. The type SamsungPhone must implement the inherited abstract method PhoneInterface.
	// => receiveCall() -> 인터페이스에 있는 메소드 전부 오버라이딩(구현)해야 함!

	@Override
	public void receiveCall() {
		System.out.println("여보세요");
	}

	@Override
	public void sendCall() {
		System.out.println("뚜루루루루루루");
	}
	
	@Override
	public void printLogo() {
		System.out.println("===== SAMSUNG =====");
	}
}
* 실행클래스

package com.kh.day08.oop.interfacepkg;

public class Exam_Interface {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		// PhoneInterface phone = new PhoneInterface();
		// 1. Cannot instantiate the type PhoneInterface
		// => 인터페이스로 객체 생성 불가. => 자식 클래스 업캐스팅 해서 사용!
		PhoneInterface phone = new SamsungPhone();
		// 업캐스팅!
		phone.sendCall();
		phone.receiveCall();
		phone.printLogo();
	}
}


💡 문제 2.

동물 먹이주기 (사육사와 동물 연결)


✔️ 소스 코드

* 추상 클래스

package com.kh.day08.oop.interfacepkg.zoo;

public abstract class Animal {

}
* 인터페이스

package com.kh.day08.oop.interfacepkg.zoo;

public interface FoodInterface {
	//public abstract 생략가능
	public abstract String animalFood();
}
코드를 입력하세요
* 실체 클래스 - 곰

package com.kh.day08.oop.interfacepkg.zoo;

public class Bear extends Animal implements FoodInterface {
	
	public String animalFood() {
		return "salmon";
	}
}
* 실체 클래스 - 호랑이

ackage com.kh.day08.oop.interfacepkg.zoo;

public class Tiger extends Animal implements FoodInterface {

	public String animalFood() {
		return "beef";
	}
}
* 실체 클래스 - 사자

package com.kh.day08.oop.interfacepkg.zoo;

public class Lion extends Animal implements FoodInterface {
	
	public String animalFood() {
		return "gazel";
	}
}
* 실체 클래스 - 사육사

package com.kh.day08.oop.interfacepkg.zoo;

public class ZooKeeper {
	
	// feed는 오버로딩 되어있음.	
	public void feed(FoodInterface predator) {
		// 하나의 메소드로 모든 객체 대응이 가능함!
		// animalFood가 오버라이딩되어있어서 동적바인드에 의해 메소드가 실행됨.
		System.out.println("feed" + predator.animalFood());
	}
	
//  feed는 오버로딩 되어있어서 interface 만들어 메소드 만들어서
//  메소드를 각각 만들지 않아도 됨!
//	public void feed(Bear bear) {
//		System.out.println("feed" + bear.animalFood());
//	}
//	
//	public void feed(Tiger tiger) {
//		System.out.println("feed" + tiger.animalFood());
//	}
//	
//	public void feed(Lion lion) {
//		System.out.println("feed" + lion.animalFood());
//	}
	
	public static void main(String [] args) {
		ZooKeeper zk = new ZooKeeper();
		zk.feed(new Bear());	
		zk.feed(new Tiger());
		zk.feed(new Lion());
	}
}


💡 문제 3.

악기 연주하기 (뮤지션과 악기 연결)


✔️ 소스 코드

* 인터페이스

package com.kh.day08.oop.interfacepkg.muisc;

public interface Instrument {
	void tunning();
	void playInstrument();
}
* 실체클래스 - 드럼

package com.kh.day08.oop.interfacepkg.muisc;

public class Drum implements Instrument{
	// 오버라이드
	@Override
	public void tunning() {
		System.out.println("doonggggg changgggg");
	}

	@Override
	public void playInstrument() {
		System.out.println("doonggggg changgggg~");
	}
}
* 실체클래스 - 기타

package com.kh.day08.oop.interfacepkg.muisc;

public class Drum implements Instrument{
	// 오버라이드
	@Override
	public void tunning() {
		System.out.println("doonggggg changgggg");
	}

	@Override
	public void playInstrument() {
		System.out.println("doonggggg changgggg~");
	}
}
* 실체클래스 - 피아노

package com.kh.day08.oop.interfacepkg.muisc;

public class Piano implements Instrument{
	// 오버라이드
	@Override
	public void tunning() {
		System.out.println("도레미파솔라시도");
	}

	@Override
	public void playInstrument() {
		System.out.println("도레미파솔라시도~");
	}
}
* 실체클래스 - 뮤지션

package com.kh.day08.oop.interfacepkg.muisc;

public class Musition {
	
	public void play(Instrument instrument) {
		instrument.playInstrument();
	}
	
//  뮤지션이 악기 소리를 내기 위해서 아래 메소드를 전부 입력해야 하나, 
//  인터페이스를 사용하면 코드를 줄일 수 있다.
//	public void play(Drum drum) {
//		drum.playInstrument();
//	}
//	
//	public void play(Guitar guitar) {
//		guitar.playInstrument();
//	}
//	
//	public void play(Piano piano) {
//		piano.playInstrument();
//	}
}
* 실행클래스

package com.kh.day08.oop.interfacepkg.muisc;

public class Stage {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Musition musition = new Musition();
		musition.play(new Drum());
		musition.play(new Guitar());
		musition.play(new Piano());
	}
}
profile
꾸준히
post-custom-banner

0개의 댓글