[자바]인터페이스 구현에 관한 질문입니다.
과꽃
interface a
{
void sayHello();
};
class b implements a
{
public void sayHello() {
System.out.println(Hello in b);
};
};
class c extends b implements a
{
public void sayHello() {
System.out.println(Hello in c);
};
};
public class test
{
public static void main(String[] args) {
b t = new c();
t.sayHello();
}
};
위 예제는 제가 인터페이스를 두번 구현하면 어떻게 될까? 해서
급하게 만들어본 소스입니다.
간단하게 설명을 드리면
a를 b에서 구현하고b상속한 c에서 a를 다시 구현해보자해서 만든거였습니다.
에러가 날거라고 생각했습니다. a를 두번 구현하니까요
근데 아니더군요.. 인터페이스가 원래 그런건가요??
저게 가능한 원리는 무엇인가요??
-
태양
두번 구현한다는건 코드내에서나 그렇고 실제 생성된 클래스파일을 보면 하나만 구현되었다고 나옵니다. 왜냐하면 b가 a를 구현한건 b의 클래스 파일에 기록됩니다.
그리고 c가 b를 상속하고 a를 구현한건 c의 클래스파일에 기록되는데 결국 c 의 클래스 파일에는 b하고 a만 언급될 뿐, 자신의 부모클래스인 b가 다시 a를 구현하고 있는지 검사하지도 않고 검사할 필요도 없습니다.
왜냐하면 논리적으로 아무 문제가 없으니까요.
\같은 인터페이스를 두번 -
봄나비
호기심에 해보시는 건 좋은데... 이런걸로 고민하지 않으시기 바랍니다. 시간낭비입니다.
-
권뉴
조금만 달리생각하면 아주 간단합니다.
알고 계신것 처럼, 인터페이스는 객체생성은 할수 없어도, 인테페이스의 변수선언은 가능합니다.
클래스 B가 인터페이스 A를 \구현\ 할때 다음과 같이 할 수 있습니다.
A ia = new B();
C++로 표현한다면 A *ia = &b; 가 되고 B의 인스턴스를 가리키는
A형 포인터 ia가 되는 것입니다.
즉 자바의 ia나 C++의 *ia는 B 객체주소를 갖고 있는 \참조\ 입니다.
몇번을 반복하든 대입되는(실