Inner Interface 혹은 Interface안에 InnerClass
public abstract interface IA extends superAbc{
public static final int aa = 1;
public void asd();
interface IB{
public void test();
}
class CA{
public void a1(){
}
}
abstract class CB{
public abstract void a23();
}
}
질문
1. 위처럼 interface를 abstract으로 선언할 수 있나요? 일단 이클립스 상에서 문법오류는 나지 않습니다.
다만 interface를 abstract로 선언할 필요성이 있는지 궁금 합니다.
2.interface안에 inner Interface를 구현하는 경우가 있을까요? 만약 있다면 예를들어 어떤식으로 사용할 수 있나요?
3.interface안에 inner Class를 구현하는 경우가 있을까요? 만약 있다면 예를들어 어떤식으로 사용할 수 있나요?
4.interface안에 abstract inner class를 구현하는 경우가 있을까요? 만약 있다면 예를들어 어떤식으로 사용할 수 있나요?
위처럼 구현되는 경우를 본적이 없으나 문법상 오류가 없어 사용이 되는 경우도 있을거 같은데 어떤식으로 사용이 가능한지 알고 싶습니다.
추상클래스가 인터페이스를 implements하여 사용할 수는 있겠습니다만,
인터페이스가 추상클래스를 extends하는 것은 불가능하거나 된다해도 의미가 없을 것 같습니다.
추상클래스의 목적은 공통으로 사용할 구현체 클래스를 만드는 것입니다.
예를 들면 '학생'이라는 추상클래스를 만들어 놓고 이것을 이용하여 '초등학생', '중학생', '고등학생' 이라는 클래스를 만들 수 있을 것입니다.
이 때 '학생'이라는 추상 클래스에는 '공부한다', '졸업한다' 등과 같이 모든 학생들이 공통으로 사용하는 메소드가 구현되어 있을 것입니다.
즉, 다음과 같은 형태가 될 것입니다.
그런데 추상 클래스 역시 때로는 구조를 정의할 필요가 있기 때문에 인터페이스를 implements 할 수 있을 것입니다.
즉, 추상 클래스에 뭔가 구조 정의를 추가하고 싶을 때는 인터페이스를 implements하면 됩니다.
이 때 주의할 사항은,
일반적으로는 인터페이스를 implements하여 클래스를 만들 때는 반드시 인터페이스에 정의된 모든 메소드를 구현해야 하지만
추상 클래스가 인터페이스를 implements한 경우에는 반드시 인터페이스에 있는 모든 메소드를 구현해야하는 것은 아닙니다.
왜냐하면 추상 클래스 역시 일종의 구조를 정의한 구현체이기 때문에 아직의 구조 정의자로서의 역할을 하고 있기 때문입니다.
그런데 반대로 인터페이스가 추상 클래스를 extends하는 것은 안될 것 같습니다.
왜냐하면 인터페이스라는 것이 구조만 정의한 것인데 추상 클래스를 extends 하면서 자기도 모르게 뭔가가 구현되어버려서는 안되기 때문입니다.
이해가 되셨는지 모르겠습니다.
그럼 더 궁금하신 사항이 있으시면 댓글 남겨주시기 바랍니다.