핸드폰 로고 출력
* 인터페이스
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();
}
}
동물 먹이주기 (사육사와 동물 연결)
* 추상 클래스
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());
}
}
악기 연주하기 (뮤지션과 악기 연결)
* 인터페이스
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());
}
}