day18_FighterTextEx4

육희영·2021년 10월 28일
0
package com.java1.day18;

//인터페이스의 구현..
public class FighterTextEx4 {
	public static void main(String[] args) {
		Fighter11 f = new Fighter11();
//		Fightable f1 = (Fightable)new Fighter();  //(Fightable) 생략가능!--자식을 부모에게 넣는다.
		  	
        if (f instanceof Unit11)       {   // f 가 Unit 타입으로 형변환이 가능한가?  
//        	Unit u = (Unit)f;	
            System.out.println("f는 Unit클래스의 자손입니다."); 
        } 
        if (f instanceof Fightable11) {   
//        	Fightable f1 = (Fightable)f;
              System.out.println("f는 Fightable인터페이스를 구현했습니다."); 
        } 
        if (f instanceof Movable11) { 
//        	Movable m = (Movable)f;
              System.out.println("f는 Movable인터페이스를 구현했습니다."); 
        } 
        if (f instanceof Attackable11) { 
//        	Attackable a = (Attackable)f;
              System.out.println("f는 Attackable인터페이스를 구현했습니다."); 
        } 
        if (f instanceof Object) {
//        	Object obj = (Object)f;
              System.out.println("f는 Object클래스의 자손입니다."); 
        } 
	}
}

class Fighter11 extends Unit11 implements Fightable11 { 
	/* move 메서드와 attack 메서드를 오버라이딩 하였다.
	 * 그런데 오버라이딩을 할때에는 조상의 메서드 보다 넓은 범위의 접근 제어자를
	 * 지정해야 한다든 것을 기억하자!
	 */
	@Override
	public void move(int x, int y) {/* 내용 생략 */} 	//조상이 public 이므로 public 이어야 한다.
 
	@Override
	public void attack(Unit11 u) { /* 내용 생략 */ } 
} 

class Unit11 { 
	int currentHP;             // 유닛의 체력 
	int x;                   // 유닛의 위치(x좌표) 
	int y;                   // 유닛의 위치(y좌표) 
} 
//interface 의 다중 상속의 경우 implements가 아닌 extends를 사용하는것을 주의하자.
interface Fightable11 extends Movable11, Attackable11 { } // 인터페이스는 클래스와 달리 다중상속이 가능하다. 인터페이스는 인터페이스로 부터만 상속가능.
interface Movable11 {	void move(int x, int y);	} //public abstract가 생략 되어 있다.
interface Attackable11 {	
	void attack(Unit11 u);	//추상 메서드 이므로 끝에 세미콜론(;) 해주자.
} 

출력결과

f는 Unit클래스의 자손입니다.
f는 Fightable인터페이스를 구현했습니다.
f는 Movable인터페이스를 구현했습니다.
f는 Attackable인터페이스를 구현했습니다.
f는 Object클래스의 자손입니다.

0개의 댓글

관련 채용 정보