개인공부/java
인터페이스
케잉
2023. 12. 17. 20:01
- 추상 메서드의 집합 (암기!) .. 그외에 부가적으로 상수, static 메서드, default 메서드
- 구현된 것이 전혀 없는 설계도. 껍데기(모든 멤버가 public)
- 인터페이스는 항상 public, abstract이니까 생략가능
- 객체에서 다른객체의 변수에 접근하려면 메서드를 통해서 접근해야함 (캡슐화)
t.hour (x)
t.getHour (o)
- 추상클래스와 인터페이스의 차이는?
추상클래스: 일반클래스인데 추 상메서드를 갖고있는것
인터페이스: 추상메서드만 갖고있음 그외 아무것도 없음
interface 인터페이스이름 {
public static final 타입 상수이름= 값; // 상수
public abstract 메서드이름(매개변수목록); // 추상메서드
}
변수는 가질 수 없음
인터페이스의 상속
- 인터페이스 조상은 인터페이스만 가능 (Object가 아님)
- 다중 상속이 가능 (조상 여러개) (추상메서드는 충돌해도 문제 없음)
//다중상속 가능
interface Fightable extends Movable, Attackable { }
- 추상메서드는 충돌해도 문제 없음
{ } 이 없기떄문에 내용이 다를게 없어서 충돌문제 없음
인터페이스의 구현 (=미완성 설계도 완성)
- 인터페이스에 정의된 추상 메서드를 완성하는 것
class 클래스이름 implements 인터페이스 이름 {
// 인터페이스에 정의된 추상메서드를 모두 구현해야 한다
}
//cf. 추상클래스는 extends 사용
--Fightable 인터페이스--
interface Fightable {
void move(int x, int y);
void attack(Unit u);
}
// Fighter 클래스는 Fightable 인터페이스를 구현했다
// 추상메서드의 몸통을 만들어줘서 abstract 없다
class Fighter implements Fightable {
public void move(int x, int y) { }
public void attack(Unit u) { }
}
인터페이스의 구현이란??
인터페이스의 추상 메서드 몸통 { } 만들기 (미완성 설계도 완성하기)
//추상클래스 구현 - 미완성 Player에서 상속받아 AudioPlayer 완성
class AudioPlayer extends Player {
void play(int pos) { } //추상메서드 구현
void stop() { } //추상메서드 구현
//인터페이스 구현 - 미완성 Fightable에서 구현
class Fighter implements Fightable {
public void move (int x, int y){ }
public void attack (Unit u) { }
}