Java8에 interface에서 default 메서드가 추가 된다면 어떻게 될까?

public abstract class AbstractTest {
    abstract void printString();
}

public interface InterFaceTest {
    default void printString(){
        System.out.println("PrintInterface");
    }
}

이럴 경우 AbstractTest를 상속받고 InterFaceTest를 구현하면 어떻게 될까?
public class Test extends AbstractTest implements InterFaceTest {

}

이럴 경우에는 IDE에서는 아래와 같은 충돌로 에러를 검출한다.
Class 'Test' must either be declared abstract or implement abstract method 'printString()' in 'AbstractSimple'
이럴 경우에는 아래와 같이 AbstractClass의 메서드를 구현한다.
public class Test extends AbstractTest implements InterFaceTest {
    @Override
    public void printString() {

    }
}

정리
- default Method 와 조상 클래스의 메서드 간의 충돌 : 인터페이스에서 디폴트 메서드는 무시된다.
- 여러 인터페이스의 디폴트 메서드간의 충돌 : 인터페이스를 구현한 클래스에서 디폴트 메서드를 오버라이딩 해야한다.

'ProgramLanguage > Java' 카테고리의 다른 글

JNDI (Java Naming and Directory Interface)  (0) 2020.08.30
JVM 메모리 구조 (1)  (0) 2020.03.22
JVM 튜닝  (0) 2020.02.10
Lambda_Expression(2)  (0) 2020.01.25
객체 지향 설계 5원칙 - SOLID  (0) 2019.12.26

+ Recent posts