2009-09-29 4 views
5

나는이 Java에서 인터페이스에서 추상 메소드를 사용해야하는시기는 언제입니까?

public interface IFoo 
{ 
    public abstract void foo(); 
    public void bar(); 
} 

foo는()과 바()의 차이점은 무엇입니까 자바

에 다음과 같은 인터페이스? 초록은 언제 사용해야합니까?

두 가지 모두 미묘한 부분을 놓치지 않으면 둘 다 내가 원하는 것을 성취하는 것 같습니다. 이 시나리오에서 Why would one declare a Java interface method as abstract?

+0

정말 컴파일됩니까? –

+1

컴파일됩니다. 단지 추상적 수정자가 중복된다는 것입니다. – Anoop

+3

이 질문에 속아 넘는 것처럼 보입니다. http://stackoverflow.com/questions/641536/why-would-one-declare-a-java-interface-method-as-abstract –

답변

18

기능상의 차이는 없습니다. Java 인터페이스에는 구현이 제공되지 않으므로 모든 메소드 선언이 암시 적으로 추상화됩니다.

[1] 참조 :

주 : 인터페이스 (인터페이스 부 참조)의 방법 모두가 암시 추상되도록 추상적 수정 http://java.sun.com/docs/books/tutorial/java/IandI/abstract.html

직접 견적 상기 형성 인터페이스 메소드와 함께 사용되지 않습니다 (필요하지 않을 수도 있음).

2

abstract

업데이트, 복사 (AS는 public로 인터페이스 메소드를 표시한다) 필요가 없다.

대신은 하위 클래스에 의한 재정의를 시행하기 위해 추상 클래스의 메소드에서이 값을 사용합니다.

3

인터페이스의 모든 메소드가 추상적이므로 두 가지 모두 동일합니다.

2

선언간에 차이가 없습니다. 개념적으로 인터페이스의 모든 메소드는 추상적입니다.

17

인터페이스 방법은 기본값으로 publicabstract입니다. foo()bar() 사이에는 차이가 없으므로 모든 publicabstract 키워드를 안전하게 제거 할 수 있습니다.

+4

"기본적으로" 오히려 "암묵적으로" "기본적으로"는 "공개 초록"이외의 다른 옵션으로 해석 될 수 있습니다. –

5

합니다. Java Language Specification에서 :

몸 인터페이스의 의 모든 메소드 선언은 암시 적으로 추상적 인 , 그래서 몸은 항상 세미콜론이 아닌 블록으로 표시 입니다.

인터페이스의 본체 에있는 모든 메소드 선언은 묵시적으로 공개됩니다.

즉, publicabstract은 인터페이스 메소드에서 생략 할 수 있습니다.

4

그것은 (이 차이는 두 선언 사이에 없습니다) 명시 적으로 Java 언어 사양의 section 9.4에 낙담 중복의 : 이전 버전의 Java 플랫폼의 과의 호환성을 위해, 그것은 을 허용하지만 권장하지 않습니다

, 스타일의 문제로 을 사용하여 인터페이스에 선언 된 메서드에 대해 추상 한정자를 중복 지정합니다.

그리고 public 유사 불필요하고 실망입니다 :

은 허용하지만 강하게 중복 인터페이스 방법에 대한 공공 수정을 지정하는 스타일의 문제로 좋습니다. public 강하게 낙담하지만 abstract 그냥 권장하지 않습니다 이유가 인터페이스 안에 선언으로

나는

+1

그냥 추측 ...하지만 추상 키워드에 대한 - 그것은 중복과 꽤 분명하다 - 거기에 구현이 없습니다. 인터페이스의 일반적인 개념을 알고 있다면 쉽게 알 수 있습니다. 공개 수정자가 지정된 경우 공개를 모르는 사람이 액세스 수정자를 다른 것으로 변경할 수 있다고 생각하는 기본 (및 유일한) 옵션입니다. – Nate

0

... 모두 foo는()과 바() 추상적이다 모르겠어요. 여기서 사용한 추상적 단어는 아무 의미가 없습니다. 더 잘 제거하십시오.

0

자바의 인터페이스는 완전히 추상적 인 클래스와 "어떻게 든"같기 때문에 인터페이스의 메소드 선언에 "추상"키워드를 추가하는 것은 메소드와 아무 관련이 없습니다!

관련 문제