인터페이스 메소드를 추상 메소드로 고려할 수 있습니까?


15

나는 그것에 대해 생각하고 있었고, 의심이 있었다.

예를 들어 인터페이스를 선언하면

public interface MyInterface
{
   public void method1();
   public void method2();
}

이러한 인터페이스 방법을 추상적 인 것으로 간주 할 수 있습니까? 내 말은 추상적 인 방법의 개념은 다음과 같습니다.

추상 메소드는 선언되었지만 구현이 포함되지 않은 메소드입니다.

그렇다면이 방법들을 추상적 인 것으로 간주 할 수 있습니까? 내가 abstract단어를 사용하지 않기 때문에 그것들은 "순수한"추상적 인 방법은 아니지만 개념적으로는 그대로있는 것처럼 보입니다.

그것에 대해 무엇을 말해 줄 수 있습니까?

감사.


SO에 아마 제일
billy.bob

5
@ billy.bob-스택 오버플로에 비해 너무 추상적이라고 생각합니다. 여기에는 특정 코딩 문제 가 없습니다 .
ChrisF

이 Java 코드입니까?
Andres F.

아니에요 단지 예일뿐입니다. 질문은 어떤 프로그래밍 언어에 초점을 맞추지 않았습니다.
rogcg 2016 년

답변:


14

인터페이스는 "순수하게"추상 클래스와 같습니다. 클래스와 모든 메소드는 추상적입니다. 추상 클래스는 메소드를 구현할 수 있지만 클래스 자체를 인스턴스화 할 수 없습니다 (상속 및 DRY에 유용).

인터페이스의 경우 구현이 전혀 없으므로 계약 목적으로 유용합니다. 인터페이스를 구현하는 경우 인터페이스  에서 메소드를 구현 해야합니다 .

차이점은 추상 클래스가 메소드를 구현할 수 있지만 인터페이스는 불가능하다는 것입니다.

그것들이 분리 된 이유는 클래스가 여러 인터페이스를 구현할 수 있기 때문입니다. Java 및 C #은 클래스를 단일 상위 클래스에서 고유하도록 제한합니다. 일부 언어에서는 여러 클래스에서 상속 할 수 있으며 "순수하게"추상 클래스를 통해 인터페이스 작업을 수행 할 수 있습니다. 그러나 다중 상속에는 끔찍한 다이아몬드 문제가 있습니다.


추상 클래스의 상속과 하나 이상의 인터페이스 구현의 차이점을 통합 한 +1

다이아몬드 문제는 대단한 역설입니다.
rogcg

1
'인터페이스는 "순수한"추상 클래스 "부분과 동의하지 않습니다. 그들은 두 가지 유형의 OO '빌딩 블록'이므로 실제로는 전혀 비슷하지 않습니다. 그것들은 몇 가지 공통된 특징을 공유하지만, 실제로는 남성과 여성과 같은 다른 유형입니다 :)
NoChance

5
@Emmand Kareem 나는 '인터페이스는 "순수하게"추상적 인 클래스와 같다 "라는 의견에 동의하지 않는다. 그것이 내가 쓴 이유입니다 :-). 의견이 맞지 않을만한 충분한 이유가 있다면 게시하고 싶습니다.
코더

그 C # 8을 주목할 그것은의 가치도의 개념을 소개하고 기본 인터페이스 구현
존 우

11

유용한 답변을 여기에서 찾았습니다 : http://download.oracle.com/javase/tutorial/java/IandI/abstract.html

인터페이스의 모든 메소드는 내재적으로 추상적이므로 추상 수정자는 인터페이스 메소드와 함께 사용되지 않습니다 (필수는 아님).


1
또한 추상 클래스는 하나의 다른 객체를 확장 합니다. 인터페이스는 수퍼 클래스에 대한 개념이 없습니다.

2
또한 여러 인터페이스를 구현할 수 있지만 추상이든 아니든 한 클래스에서만 상속 할 수 있습니다.
NullUserException

@ ThorbjørnRavnAndersen : 인터페이스는 하나 이상의 인터페이스를 확장 할 수 있습니다. 그것은 수퍼 클래스와 같은 것이 아니지만 상속 수준입니다.
unholysampler

여러 인터페이스를 구현할 수 있습니다. 다중 상속 개념처럼 보이지만 정확하게는 아닙니다.
rogcg

내가 말했듯이 @unholysampler는 수퍼 클래스가 아닙니다.

4

추상 클래스 는 추상 메소드를 가질 있습니다.

인터페이스 는 추상 메소드 가질 수 있습니다 .

method1()그리고 method2()귀하의 예에는 추상적 인 방법이 있습니다.


-1

여기서 차이점은 추상 클래스는 구현 세부 정보를 포함 할 수 있지만 자체적으로 인스턴스화 할 수는 없다는 것입니다. 인터페이스는 단순히 클래스의 템플릿입니다


8
추상 메소드 는 구현 세부 사항을 포함 할 수 없습니다. 추상 클래스가 가능합니다.
Matt H

나는 방법과 클래스의 차이점을 알고 있지만 당신이하고있는 요점을 이해할 수 없습니까?
billy.bob

귀하의 답변에 따르면 추상 메소드에는 구현 세부 정보가 포함될 수 있지만 그럴 수는 없습니다. 오타 야?
Matt H

1
나는 오타를 고쳤다.
Martijn Verburg

1
@ billy.bob이 질문은 abstact 방법에 관한 것입니다.
SoylentGray

-2

따라서 서브 클래스에서 상속 된 추상 메소드는 구현없이 다시 추상화 될 수 있지만 클래스가 인터페이스를 구현하는 경우 메소드를 구현해야합니다.


-3

인터페이스 클래스에는 추상 메소드가 없습니다. 그들은 전혀 방법이 없습니다. 그들은 인터페이스를 준수하기 위해 다른 클래스가 구현해야 할 메소드 목록 만 있습니다. 귀하의 예에는 누군가 가이 메소드를 클래스에 추가 할 때까지 method1 메소드와 method2 메소드가 없습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.