2012-12-19 2 views
0

인터페이스에 대한 몇 가지 흥미로운 문제가 있습니다.이 개념을 이해하게 도와주세요.인터페이스 방법 섀도 잉 Java

세 가지 인터페이스 Itest, Itest3, Itest4가 있습니다. 인터페이스 Itest는 Itest3 및 Itest4 인터페이스를 모두 확장합니다. 그들은 두 인터페이스는 이제 클래스 테스트가의 방법을 상속하는 인터페이스의 이제 Itest 인터페이스 및 재정의 방법 one()

를 구현 public void one(); 일반적인 하나 개의 방법이 있습니까? 특정 인터페이스의 일반적인 방법을 상속하려면 어떻게해야합니까? 그리고 다형성에 어떤 영향이 있습니까? 다른 클래스가 Itest3 만 상속한다면 어떻게 될까요? 나는 이것이 런타임에 깨질 것이라고 생각한다.

이점이 무엇인지 이해하게 도와주세요.

코드

public interface ITest extends Itest4,Itest3 { 
    public static interface ITest2{ 

    } 
} 

public interface Itest3 { 
    public void one(); 
} 

public interface Itest4 { 
    public void one(); 
} 

public class Test implements ITest {  

    @Override 
    public void one() { 
     //Which interface method it overrides? 
    } 

public static void main(String... arg) { 
     new Test(); 
    } 

} 

답변

4

대답은 ... 여기에 있습니다 : 그것은 중요하지 않습니다.

인터페이스는 코드가 아니라 선언입니다. 두 인터페이스 모두 public void one() 메서드를 선언합니다. 이 메서드를 구현하는 구현 클래스가 있으면 두 인터페이스에 대해 동시에이 메서드를 구현합니다. class Test의이 구현은 아무 것도 무시하지 않습니다. 첫 번째 구현입니다. 오버라이드 (override) 할 수있는 인터페이스는 구현되어 있지 않습니다.

다른 클래스가 ITest3을 구현하면 public void one()에 대한 자체 구현이 필요합니다. ITest4 또는 ITest를 구현하는 다른 클래스와 같습니다. 자신 만의 구현을 필요로하지 않는 유일한 경우는 Test 클래스를 확장하는 클래스가있을 때입니다. Test 클래스를 구현에서 상속받을 수 있기 때문입니다.

2

public interface Itest3 { 
    public void one(); 
} 

단순히 Itest3의 구현이 하나라는 방법을 제공한다고 선언은, 인수를 취하지 않고, 무효 반환합니다. 정확히 같은 방식으로

public interface Itest4 { 
    public void one(); 
} 

도 Itest4의 구현이 하나라는 방법을 제공한다고 선언에서

는, 인수를 취하지 않고, 무효 반환합니다.

인터페이스는 단순히 동작의 구현과 관계없이 동작 계약을 지정하기 위해 존재합니다. 따라서 ,

public class Test implements ITest {  

    @Override 
    public void one() { 
     //Defines the behavior of both interfaces 
    } 
} 

모두 인터페이스를 구현하는 클래스를 정의한다. 메소드 구현이 두 인터페이스의 요구 사항을 모두 충족시키기 때문입니다.

관련 문제