day19_FighterTestEx11

육희영·2021년 10월 28일
0

인터페이스 필기

package com.java1.day19;
/*인터페이스
 * 추상 클래스를 부분적으로만 완성된 미완성 클래스라면
 * 인터페이스는 구현된 것은 아무것도 없고 밑그림만 그려져 있는 기본 설계도이다.
 * 추상 메서드와 상수만을 멤버로 가질수 있다.(중요)--최근에는 정적 메서드와 default 메서드도 사용가능..1.8부터
 * */

/*인터페이스 작성
 * 모든 멤버변수는 public static final 이어야 하며, 이를 생략할 수 있다.
 * 모든 메서드는 public abstract이어야 하며, 이를 생략할 수 있다.
 * interface 인터페이스이름{
 * public static final 타입 상수이름 = 값;
 * public abstract 메서드이름(매개변수목록)
 * }
 * */
public class FighterTestEx11 {
	public static void main(String[] args) {
		Fighter f = new Fighter();
//	Fightable f1 = (Fightable)new Fighter(); // (Fightable) 생략가능! --자식을 부모에게 넣는다.

		if (f instanceof Unit) { // f가 Unit타입으로 형변환이 가능한가?
			Unit u = (Unit) f;
			System.out.println("f는 Unit클래스의 자손입니다.");
		}
		if (f instanceof Fightable) { // f가 Unit타입으로 형변환이 가능한가?
			Fightable f1 = (Fightable) f;
			System.out.println("f는 Fightable인터페이스를 구현했습니다.");
		}
		if (f instanceof Movable) { // f가 Unit타입으로 형변환이 가능한가?
			Movable m = (Movable) f;
			System.out.println("f는 Movable인터페이스를 구현했습니다.");
		}
		if (f instanceof Attackable) { // f가 Unit타입으로 형변환이 가능한가?
			Attackable a = (Attackable) f;
			System.out.println("f는 Attackable인터페이스를 구현했습니다.");
		}
		if (f instanceof Object) { // f가 Unit타입으로 형변환이 가능한가?
			Object obj = (Object) f;
			System.out.println("f는 Object클래스의 자손입니다.");
		}

	}
}

class Fighter extends Unit implements Fightable {
	@Override
	public void move(int x, int y) {/* 내용 생략 */} // 조상이 public이므로 public이어야 한다.

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

class Unit{
	int currentHP; //유닛의 체력
	int x; //유닛의 위치(x좌표)
	int y; //유닛의 위치(y좌표)
}
interface Fightable extends Movable, Attackable{} //인터페이스는 다중 상속이 가능하다.
interface Movable {void move(int x, int y);} //public abstract가 생략되어 있다.
interface Attackable {
	void attack(Unit u); //추상 메서드이므로 끝에 세미콜론(;) 해주자.
	static void print(String msg) { //최근에 인터페이스에 정적 메서드도 사용이 가능해졌다..1.8부터
		System.out.println("JAVA*");
		
	}
	default void defaultTest() {
		System.out.println("Default"); //정적 메서드와 함께 default 메서드도 사용이 가능해졌다..1.8부터
	}
	
}

출력결과

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

0개의 댓글

관련 채용 정보