728x90
반응형
인터페이스 (Interface)
- 추상 클래스처럼 내부에 추상 메서드를 지닐 수 있다.
- 인터페이스 내부에 선언하는 모든 변수들은 자동으로 final static이 된다.
- 인터페이스 내부에 선언하는 메서드는 모두 자동으로 abstract public이 된다.
- 추상 클래스는 하나밖에 상속받을 수 없지만, 인터페이스는 여러개 구현 받을 수 있다.
- 인터페이스를 통해 하나의 클래스가 더욱 다양한 형태를 지닐 수 있게 된다.
- 추상 클래스에는 인스턴스 영역이 존재하지만, 인터페이스에는 인스턴스 영역이 아예 없다.
package myinterface;
public interface Swimmer {
// abstract : 자식 클래스로 구현을 미룬다.
public abstract void swin();
// abstract public을 생략해도 자동으로 abstract public 메서드가 된다.
// 아무것도 안붙여도 자식 클래스로 구현을 미룬다.
void dive(int meter);
}
package myobj2;
public interface Runner {
void run();
}
package myobj2;
import myinterface.Swimmer;
public class Shark implements Swimmer {
int speed;
@Override
public void swin() {
System.out.println("상어가 " + speed + "의 속도로 헤엄칩니다.");
}
@Override
public void dive(int meter) {
System.out.println("상어가 " + meter + "만큼 잠수했습니다.");
}
}
package myobj2;
import myinterface.Swimmer;
public class Bear implements Swimmer, Runner {
int runSpeed;
int swimSpeed;
@Override
public void run() {
System.out.printf("곰이 %d의 속도로 뜁니다.\n", runSpeed);
}
@Override
public void swin() {
System.out.printf("곰이 %d의 속도로 헤엄칩니다.\n", swimSpeed);
}
@Override
public void dive(int meter) {
System.out.println("곰은 잠수는 잘 못합니다.");
System.out.println("곰이 " + meter * 0.3 + "만큼 잠수했습니다.");
}
}
import myinterface.Swimmer;
import myobj2.Bear;
import myobj2.Runner;
import myobj2.Shark;
public class C17_Interface {
// 뭐가 올지 모르겠지만 뛸 수 있는 것은 모두 전달될 수 있는 메서드
public static void run(Runner r) {
r.run();
}
// 뭐가 올지 모르겠지만 수영할 수 있는 것은 모두 전달될 수 있는 메서드
public static void swim(Swimmer s) {
s.swin();
s.dive(10);
}
public static void main(String[] args) {
Bear b = new Bear();
Shark s = new Shark();
// 인터페이스 타입으로 변수를 선언할 수 있고 업 캐스팅이 가능
Swimmer swim1 = b;
Swimmer swim2 = s;
Runner run1 = b;
run(new Bear());
swim(new Bear());
swim(new Shark());
}
}
728x90
반응형
'JAVA > 기본 이론' 카테고리의 다른 글
JAVA | HashSet (0) | 2023.04.01 |
---|---|
JAVA | ArrayList (0) | 2023.04.01 |
JAVA | 추상 클래스와 추상 메서드 (0) | 2023.04.01 |
JAVA | final (0) | 2023.04.01 |
JAVA | 인스턴스 생명 주기(Instance Life Cycle) (0) | 2023.04.01 |