implements
- 인터페이스 구현
- 자바는 다중상속을 지원하지 않는 대신 인터페이스(implement)가 있음.
- 설계목적
- 자식 메소드는 부모 메소드(interface에 있는)를 반드시 오버라이딩(재정의) 해야함.
예제
class Animals{
String name;
public void setName(String name) {
this.name = name;
}
}
class Tiger extends Animals implements Predater{
public String getName() {
return "tiger";
}
}
class Lion extends Animals implements Predater{
public String getName() {
return "lion";
}
}
class Zookeeper {
void feed(Predater predater) {
System.out.println("feed apple to " + predater.getName());
}
interface Predater {
String getName();
}
public class test {
public static void main(String[] args){
Zookeeper zookeeper = new Zookeeper();
Tiger tiger = new Tiger();
Lion lion = new Lion();
zookeeper.feed(tiger);
zookeeper.feed(lion);
}
}
- interface인 Predater를 상속받는 클래스는 getName()이라는 메소드가 있어야 한다.
- interface를 상속받는 Tiger, Lion은 각각 getName()가 멤버 메소드로 선언되어있다.
- Zookeeper 클래스의 feed 메소드는 Predater 자료형을 받아서, Predater.getName을 실행한다.
- interface로 Tiger, Lion의 공통된 메소드인 getName을 관리한다.
- interface Predater를 상속받는 클래스는 getName 메소드가 있어야 함을 강제한다. -> class의 extends 상속과 가장 큰 차이
디폴트 메소드 Default Method
- interface 내부에서 default로 메소드를 선언하면, interface를 상속받는 클래스는 해당 메소드를 구현하지 않아도 사용 가능하다.
interface
interface Predater {
String getName();
default void printName() {
System.out.println("my name is " + getName());
}
}
메인 클래스
public class test {
public static void main(String[] args){
Zookeeper zookeeper = new Zookeeper();
Tiger tiger = new Tiger();
tiger.printName(); // my name is tiger
}
}
스태틱 메소드 Static Method
- interface 내부에서 static로 메소드를 선언하면, interface를 상속받는 클래스 내부에서 interface이름.method이름 형식으로 해당 메소드를 사용할 수 있다.
interface
interface Predater {
int LEG_COUNT = 4;
static int speed(){
return LEG_COUNT * 30;
}
}
- 인터페이스 내부에서 지정한 상수는 public static final 이 기본으로 적용되고, 다른 형태의 상수로는 정의되지 않는다.
자식 클래스
class Lion extends Animals implements Predater{
public String getName() {
System.out.println(Predater.speed());
return "lion";
}
}
메인 클래스
public class test {
public static void main(String[] args){
Zookeeper zookeeper = new Zookeeper();
Lion lion = new Lion();
zookeeper.feed(lion);
// 120
// feed apple to lion
}
}