익명 함수와 마찬가지로 이름이 없어 다른곳에서 사용이 불가능하며 한번만 사용 할 수 있다.
객체화가 불가능한 Interface에 활용한다.
// 익명 객체 사용
// 인터페이스를 객체화 하려고 시도하면 아래처럼 나타난다.
// 아래 내용은 객체화를 시도하니 즉석으로 객체를 제공해 준 것이다.
// 아래 객체는 def 라는 이름이 있는데 왜 익명객체?
// 여기서 익명은 객체의 이름이 없다는 것이 아니라 개체를 만드는 클래스의 이름이 없다는 것
// 클래스가 존재하지 않으니 여러곳에서 사용할 수 없다.
Defense def = new Defense() {
@Override
public String block() {
return "캐릭터가 방어를 한다.";
}
@Override
public String avoid() {
return "캐릭터가 회피한다.";
}
};
class 와 다르게 interface는 다중상속이 가능하므로 여러번의 객체화가 필요하지 않다.
// Action 만 구현받았지만
// Action 이 상속받은 다른 인터페이스의 추상메더드도 같이 오버라이드 된다.
public class Character implements Action {
// Attack
@Override
public String normal() {
return "일반 공격을 한다.";
}
@Override
public String special() {
return "특수 공격을 한다.";
}
// Defense
@Override
public String block() {
return "공격을 막는다.";
}
@Override
public String avoid() {
return "공격을 회피 한다.";
}
// Action
@Override
public String useItem() {
return "아이템을 사용 한다.";
}
@Override
public String move() {
return "이동한다.";
}
@Override
public String pickup() {
return "아이템을 줍는다.";
}
}
- OOP의 주요 특징 중 하나이다.
- 같은 부모를 상속받은 class는 같은 type으로 들어갈 수 있다.
- 특정 Interface 를 구현 받은 class 가 해당 Interface 형태로 들어갈 수도 있다.
//StandardModel 을 상속받은 객체들은 이 형태에 들어갈 수 있다.
StandardModel model = null;
model = new Tanker();
model = new Dealer();
model = new Healer();