자바

JAVA 자바 디폴트 메서드와 인터페이스 확장- 디폴트 메서드가 있는 인터페이스 상속

알통몬_ 2017. 3. 13. 10:20
반응형


안녕하세요 알통몬입니다.

공감 및 댓글은 포스팅 하는데 아주아주 큰 힘이 됩니다!!

포스팅 내용이 찾아주신 분들께 도움이 되길 바라며

더 깔끔하고 좋은 포스팅을 만들어 나가겠습니다^^

 

디폴트 메서드가 있는 인터페이스 상속

 부모 인터페이스에 디폴트 메서드가 정의되어 있을 경우, 

자식 인터페이스에서 디폴트 메서드를 사용하는 방법은 아래 세 가지가 있습니다.

1. 디폴트 메서드를 단순히 상속만 받는다.

2. 디폴트 메서드를 재정의(@Override)해서 실행 내용을 변경한다.

3. 디폴트 메서드를 추상 메서드로 재선언한다.


이러한 부모 인터페이스가 있다고 할 때.

public interface ParentInterface {

    public void method1();

    public default void method2() { /*실행문*/ }

}


ChildInterface1 은 ParentInterface를 상속하고 

자신의 추상 메서드인 method()3을 선언한다고 하면,

public interface ChildInterface1 extends ParentInterface {

public void method3();

}


ChildInterface1을 구현하는 클래스는 method1() 과 method3()의 실체 메서드를 가지고 있어야 하고,

ParentInterface의 method2()를 호출할 수 있습니다.

public class Example {

public static void main(String[] args) {

ChildInterface1 ci1 = new ChildInterface1() {

@Override

public void method1() { /*실행문*/ }

@Override

public void method3() { /*실행문*/ }

};

ci1.method1();

ci1.method2();  //ParentInterface의 method2() 호출

ci1.method3();

      }

}


2번째로 ChildInterface2는 ParentInterface를 상속하고 ParentInterface의 디폴트 메서드인 method2()를 재정의하고, 자신의 추상 메서드인 method3()을 선언한다고 하면,

public interface ChildInterface2 extends ParentInterface {

@Override

public default void method2() { /*실행문*/ }

public void method3();

}


이 경우에도 ChildInterface2 인터페이스를 구현하는 클래스는 method1()과

method3()의 실체 메서드를 가지고 있어야하며 ChildInterface2에서 재정의한 method2()를 호출할 수 있습니다.

public class DefaultMethodExtendsExample {

 

public static void main(String[] args) {

              ChildInterface2 ci2 = new ChildInterface2() {

@Override

public void method1() { /*실행문*/ }

@Override

public void method3() { /*실행문*/ }

};

ci2.method1();

ci2.method2();  //ChildInterface2의 method2() 호출

ci2.method3();

    }

}

 


마지막으로 ChildInterface3 은 ParentInteface를 상속하고 ParentInterface의 디폴트 메서드인 method2()를 추상 메서드로 선언하고, 자신의 추상 메서드인 method3()을 선언한다고 하면,

public interface ChildInterface3 extends ParentInterface {

@Override 

public void method2();

public void method3();

}


이 경우도 ChildInterface3 인터페이스를 구현하는 클래스는 method1()과 method2(),method3()의 셀체 메서드를 전부 가지고 있어야 합니다.
public class DefaultMethodExtendsExample {
public static void main(String[] args) {
ChildInterface3 ci3 = new ChildInterface3() {
@Override
public void method1() { /*실행문*/ }
@Override
public void method2() { /*실행문*/ }
@Override
public void method3() { /*실행문*/ }
};
ci3.method1();
ci3.method2();  //ChildInterface3 구현 객체의 method2() 호출
ci3.method3();
}
}


반응형