2012-11-08 4 views
-1

우리가 하나의 클래스를 구현한다고 가정하자. 인터페이스는 인터페이스와 추상 클래스에서 동일한 추상 함수를 가진 추상 클래스를 확장한다. 그런 다음 클래스는 인터페이스 또는 추상 클래스의 기능을 상속하며 그 이유는 무엇입니까?함수가 상속받을 위치와 그 이유는 무엇입니까?

처럼 :

public class A extends B implements I 
{ 
    public void set() 
    { 
     // Some code here 
    } 
} 

인터페이스 :

public interface I { 
    public void set(); 
} 

추상 클래스 :

public abstract class B 
{ 
     public abstract void set();  
} 
+2

일부 코드를 작성하고 사용해보십시오. – Doorknob

+0

메소드를 추상적으로 선언 할 때 ethier 클래스는 인터페이스 또는 추상 클래스 여야합니다. public abstract class B' – vels4j

+0

인터페이스 (및 해당 메소드)는 정의에 따라 '추상화'되어 있지만 해당 수정자는 사용되지 않습니다. http://docs.oracle.com/javase/specs/jls/se7/html/jls-9.html#jls-9.1.1.1 –

답변

4

모두. 함수 서명이 일치하는 한 컴파일러는이 "이중"상속을 허용합니다. 인터페이스의 메소드를 구현하는 것은 클래스가 컴파일 가능한지 확인하는 "계약"일뿐입니다. 인터페이스 구현은 "내 구체적인 클래스에는 set() 메소드가 있어야합니다"라는 의미입니다. 추상 클래스 B를 확장한다는 것은 "내 구체적인 클래스는 슈퍼 클래스에서 set() 메소드를 상속받으며 추상 클래스로 정의되므로 구현해야합니다." 이 두 명제가 일치하면 (예제에 따라) 모두 정상입니다.

인터페이스와 추상 클래스 사이에 함수의 서명이 다른 경우 구체적인 클래스는 두 버전을 모두 구현해야합니다.

글자 그대로 약간 추상적 인 수업을 최대한 피하십시오. abstract 클래스가 추상 메소드만을 가지고 있다면, 그것은 인터페이스 여야합니다. 일부 메소드에 코드가있는 경우 상속이 아닌 구성을 사용하도록 리팩토링하는 것이 좋습니다. 상속은 악합니다.)

0

InterfaceAbstract 클래스의 메서드는 모두 abstract이므로 구현 방법이 제공되지 않으므로 메서드가 상속 될지 여부는 알 필요가 없습니다.

여러분은 반드시 구체적인 클래스에서 인터페이스에 정의 된 모든 메소드가 추상 클래스에 구현되어 있지 않아야한다고 확인해야합니다. 슈퍼 클래스에 정의 된 모든 추상 메소드를 구현하십시오 (Guillaume의 경우).

+0

을 참조하고 슈퍼 클래스에 정의 된 모든 추상 메소드를 구현하십시오. 인터페이스에 정의되지 않았습니다.) 이 예제에서는 일치하지만 일치하지 않을 경우 둘 다 구현해야합니다. – Guillaume

+0

가리키는 주셔서 감사합니다, 나는 그것을 편집했습니다. – Abubakkar

관련 문제