본문 바로가기
java

다형성(인터페이스)

by 신방동불주먹 2022. 10. 6.

<인터페이스 (Interface)>

 


1. 생성이 불가
2. 클래스처럼 멤버를 정의할 수 없다.
3. 두가지 형식의 멤버만 정의 할 수 있다. (추상메소드, final 상수)
    -- 멤버의 제한자는 생략 가능
4. 반드시 클래스에 상속해야 한다. 
5. 자식클래스는 추상메소드를 오버라이딩 해아한다.(필수)
6. 인터페이스간 상속도 가능하다.
7. 다중 상속이 가능하다.
8. 클래스와 동일하게 다형성을 적용할 수 있다 .(제일핵심)


- 인터페이스 구현 가능 형태 
1.  final 상수 :
public static final int MAX = 100;
2. 추상 메소드 : public abstract void method(); 


- 제한자 생략 가능 형태
1. 제한자 public static final - int MAX = 100; 
2. 제한자 public abstract - void method(); 

 

 

예시 )

- 인터페이스간 상속에는 implements 사용

- 하나의 클래스 상속(extends)과 여러개의 인터페이스 상속이 가능

 

 

- Interface Attackable

package com.java.inter; 

public interface Attackable {
	void attack(Unit u);

}

 

- Class Unit

package com.java.inter;//1006-3 인터페이스 연습

public class Unit {
	int currentHP;
	int x;
	int y;
	
}

 

- 자바 클래스는 하나의 부모 클래스를 상속할수 있지만 인터페이스는 다중 상속이 가능.

extends 키워드와 콤마를 이용해서 여러 개 인터페이스를 상속

(인터페이스 간 상속 -> extends 키워드)

(클래스 인터페이스 상속 -> implements 키워드)

package com.java.inter;//1006-3 인터페이스 연습

public interface Fightable extends Moveable, Attackable {//인터페이스간 상속 = implements확인

}

 

- Interface Moveable

 

package com.java.inter;

public interface Moveable { 
void move(int x, int y); //제한자 생략한 형태

}

 

- 1개의 Class Unit 을 상속하고 1개의 Fightable Interface를 구현 

 

package com.java.inter;//1006-3 인터페이스 연습
//import com.java.inter.Unit

public class Fighter extends Unit implements Fightable {

	@Override
	public void move(int x, int y) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void attack(Unit u) {
		// TODO Auto-generated method stub
		
	}

}
package com.java.inter;//1006-3 인터페이스를 사용한 다형성

public class FighterTest {

	public static void main(String[] args) {
		Fighter f = new Fighter();
		Moveable m = new Fighter(); //업캐스팅
		Attackable aa = f; //자식->부모타입 업캐스팅
		
		if(f instanceof Unit) { //unit타입이 f의 조상인지 //변수 instanceof 클래스명 or 인터페이스 
			System.out.println("Unit은 조상 클래스이다.");
		
		}
		if(f instanceof Fightable) {
			System.out.println("Fightable은 조상 클래스이다.");
		}
		if(f instanceof Moveable) {
			System.out.println("Moveable은 조상 클래스이다.");
		}
		
	}

}

'java' 카테고리의 다른 글

String class  (0) 2022.10.07
UML(Unified Modeling Language)  (0) 2022.10.06
(abstract)추상메서드  (0) 2022.10.06
1005_lombok.jar 설치  (0) 2022.10.05
상속(private_정보은닉)  (0) 2022.10.05