2008-10-27 4 views
18

Abstract 클래스의 정확한 용도는 무엇입니까? 평범한 클래스에서 추상적 인 클래스와 같은 것을 할 수 없는가?Abstract 클래스의 정확한 사용

+0

참조 : http://stackoverflow.com/questions/56867/interface-vs-base-class –

+0

[템플릿 방법 디자인 패턴] (http://sourcemaking.com/design_patterns/template_method)을보세요. 추상 클래스는 거기에 대신 할 수 있습니다. – rafek

답변

19

추상 클래스는 하위 클래스에서 상속해야하는 기본 기능이 있지만 기본 클래스를 인스턴스화하는 데 의미가 없을 때 사용됩니다. 예를 들어, Shape 기본 클래스와 같은 것이 있으면 하위 클래스에서 사용할 수있는 내장 구현과 하위 클래스에서 구현할 인터페이스 메소드를 가질 수 있습니다. 그러나 Shape 객체를 만드는 것이 타당하지 않을 수 있습니다. 추상 클래스는이 기능을 제공합니다. 추상 클래스 사용의 또 다른 좋은 예는 abstract factory pattern입니다.

24

구체적인 구현을 제공하지만 인스턴스화를 허용하지 않기 위해 추상 클래스를 사용합니다. 혼자 서있을 수 없다면 항상 이해할 수없는 일반 클래스를 인스턴스화 할 수 있습니다. 동시에 모든 구현 클래스에서 동일한 구현이있는 경우 인터페이스가 충분하지 않을 수 있습니다. 추상 클래스로 충분합니다.

  • 인터페이스 : 계약에만, 아니 구현, 아니 인스턴스
  • 추상 클래스 : 계약, 일부 구현, 아니 인스턴스
  • 등급 : 정규 수업과는 달리 계약, 구현, 인스턴스
+0

3 위 1 위 계약 가능합니다. 계약은 해당 메소드의 선언을 의미하기 때문에 "추상"을 의미합니다. 그리고 컴파일러는 추상 클래스로 변환한다. 왜 정상적인 클래스에서 계약이 가능한가? 논리가 잘못 되었다면 제게 올바른 말을하십시오. – devsda

1

, abstract 클래스는 abstract 개의 메소드를 포함 할 수 있습니다. 인터페이스 멤버와 매우 유사합니다.

5

정규 수업은 모든 구현을 제공해야하는 등, 다른 클래스에서 파생 필드 & 중첩 된 유형을 포함, 그들은 방법을 구현할 수 있습니다

한편, 그들은 단지 정규 수업이 할 수있는 다른 모든 것들에 대해 할 수있는 행동 양식.
인터페이스를 사용하면 이 아닌에 모든 구현에 대한 구현을 제공해야합니다.

추상 클래스는 구현을 포함하는 메소드를 모두 가질 수 있고 구현을 제공하지 않지만 상속 클래스를 제공해야하는 메소드를 가질 수있는 유일한 유형의 클래스입니다.

구현없이 메소드를 추가 할 수 있다는 사실은 추상 클래스를 인스턴스화 할 수없는 이유입니다. 모든 메소드에 대한 구현이있는 인스턴스 만 인스턴스화 할 수 있습니다.

관련 문제