public만 가능하다.public static final과 public abstract는 생략할 수 있다.Comparable, Serializble확장에는 열려있고 변경에는 닫혀있다.
객체지향 프로그래밍의 원칙 중 하나.
어떤 인터페이스 InterfaceA를 클래스 ClassA, ClassB, ClassC, ClassD, ClassE가 구현하고 있다고 하자.
InterfaceA에서 methodA가 필수적으로 존재해야 하는 경우, methodA를 사용하지 않는 ClassB, ClassC, ClassD도 methodA를 구현해야 한다.
이런 경우 OCP를 위반했다고 볼 수 있다. 오히려 확장에 닫혀 있고 변경에 열려 있는 것이다.
InterfaceA에서 methodA를 default method로 선언한다면 methodA를 사용하는 ClassA에서만 methodA를 그냥 사용하거나 override할 수 있게 되고, 이는 확장에 해당한다.
public interface InterfaceA {
void abstractMethodA();
void abstractMethodB();
//...
default int defaultMethodA() {
//Implemetation
}
}
마음에 안 들면 구현 객체에서 override해서 쓰면 된다.
ClassA가 InterfaceA와 InterfaceB의 구현 클래스다InterfaceA에는 default void methodA()가 선언 및 정의되어 있다.InterfaceB에는 void methodA()가 선언되어 있다.이런 충돌이 발생할 경우 methodA()에 대한 override가 강제된다.
그렇긴 한데... 그렇게 됐습니다....
public interface InterfaceA {
void abstractMethodA();
void abstractMethodB();
//...
static int static MethodA() {
//Implemetation
}
}
stdio.h를 include하고 printf()를 호출하면 stdio.c에 정의된 내용이 실행된다.stdio.c 내용이 변경되어도 printf()를 사용하는 데에는 별 문제가 없다.