IMSfromSeoul 2020. 4. 13. 02:55

 다음과 같은 Interface를 만들었다.

 

public interface InterfaceTest {
    static void printStatic(){
        System.out.println("interface static method");
        printPrivateStatc();
    }
    default void print(){
        System.out.println("interface default method");
        printPrivate();
        printPrivateStatc();
    }
    private void printPrivate(){
        System.out.println("private interface method");
    }
    private static void printPrivateStatc(){
        System.out.println("private static interface method");
    }
}

 인터페이스는 Java 8 부터 default method, static method를 사용할 수 있게 되었고 Java 9 부터 private method를 사용할 수 있게 됐다. 주목할 점은 static method안에는 private static method만 사용할 수 있지만, default method 안에는 static private method 및 private method 둘다 사용가능하다. default method를 interface에 추가함으로써 기능으로서는 abstract method와 차이점이 거의 없어졌다고 보면 될 것 같다. 사용 용도에는 차이점이 있겠지만 말이다.

 

public class InterfaceBody implements InterfaceTest{
//    @Override
//    public void print() {
//        System.out.println("overRiding");
//    }
}

 InterfaceBody라는 이름의 클래스에서 InterfaceTest를 상속받았다. 이 때, default method는 overring 될 수 있다.

 

public class Test {
    public static void main(String args[])  {
        InterfaceTest.printStatic();

        InterfaceBody interfaceBody = new InterfaceBody();

        interfaceBody.print();
    }
}

 

static method 와 interface를 상속받은 body 인스턴스를 통해 print method를 호출했다.

 

interface static method
private static interface method
(임의의 빈칸)
interface default method
private interface method
private static interface method

출력결과