
public interface A {
default void description() {
/*내용 구현*/
}
}
public interface B{
static int total(int[] arr) {
int total = 0;
for(int i: arr) {
total += i;
}
mystaticMethod();
return total;
}
}
다이아몬드 문제 : 같은 조상 클래스를 상속 받는 두 개의 부모 클래스가 서로 하나의 메서드를 오버라이드 한경우, 자식 클래스가 두 부모 클래스를 다중 상속 받을 경우, 어떤 메서드 사용해야할지 모호해지는 문제
public interface A {
void a();
}
public interface B {
void b();
}
public interface C extends A, B {
void c();
}
public class MyClass implements C {
@Override
public void a() {}
@Override
public void b() {}
@Override
public void c() {}
public void hello() {}
}
MyClass mc = new MyClass();
B b = mc;
A a = mc; //mc는 A,B,C interface를 implements를 했지만, Type이 A 이기 때문에 a() 메서드 밖에 사용 불가. but, 구현 내용은 mc 에서 구현한 내용이다.
b.b();
a.c();
mc.a();
mc.b();
mc.c();
mc.hello();
1. 개발시간을 단축시킬 수 있다.
2. 표준화가 가능하다.
3. 서로 관계없는 클래스들에게 관계를 맺어 줄 수 있다.
4. 독립적인 프로그래밍이 가능하다.
interface I {
public abstract void method();
}
class B implements I {
@Override
public void method(){
System.out.println("[class B] method");
}
}
class A {
// public void callClassB_Method( B b ){
// b.method();
// }
public void callClassB_Method( I i ){
i.method();
}
}