<인터페이스 (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 |