추상 클래스를 사용하여 인터페이스를 구현할 때 자바에서 이상한 일이 발생합니다. 일부 인터페이스 메소드가 완전히 누락 될 수 있습니다 (즉, 추상 선언이나 실제 구현이 없음).하지만 컴파일러는 불평하지 않습니다.인터페이스를 구현하는 추상 클래스가 인터페이스 메소드 중 하나의 선언/구현을 놓칠 수있는 이유는 무엇입니까?
public interface IAnything {
void m1();
void m2();
void m3();
}
다음 추상 클래스가 명랑하게 경고 또는 오류없이 컴파일됩니다 :
public abstract class AbstractThing implements IAnything {
public void m1() {}
public void m3() {}
}
당신이 이유를 설명 할 수있는 인터페이스를 제공 예를 들어
?
추상 클래스의 개체를 만들 수 없습니다. 따라서 추상 클래스에 대한 구현이 제공되지 않는 한 IAnything에 대한 객체를 만들 수 없습니다. 그래서 이것은 컴파일러에게는 절대적으로 좋습니다. 컴파일러는 IAnything을 구현하는 비 추상 클래스는 IAnything으로 선언 된 모든 메소드를 구현해야한다고 생각합니다. 그리고 객체를 생성 할 수 있도록 AbstractThing을 확장하고 구현해야하므로 컴파일러는 AbstractThing에 의해 생략 된 모든 메소드를 구현하지 않으면 컴파일러에서 오류를 발생시킵니다. – VanagaS
"어댑터 설계 패턴"이라고 부를 수 있습니까? 우리가 m1, m2, m3을 추상 클래스에서 빈 몸체로 유지한다면. 그런 다음 MyMainClass는 해당 추상 클래스를 확장하고 원하는 모든 메서드를 재정의 할 수 있습니다. 모든 메서드를 재정의 할 필요는 없습니다. 알려주세요 !! –