Abstract 클래스의 정확한 용도는 무엇입니까? 평범한 클래스에서 추상적 인 클래스와 같은 것을 할 수 없는가?Abstract 클래스의 정확한 사용
답변
추상 클래스는 하위 클래스에서 상속해야하는 기본 기능이 있지만 기본 클래스를 인스턴스화하는 데 의미가 없을 때 사용됩니다. 예를 들어, Shape 기본 클래스와 같은 것이 있으면 하위 클래스에서 사용할 수있는 내장 구현과 하위 클래스에서 구현할 인터페이스 메소드를 가질 수 있습니다. 그러나 Shape 객체를 만드는 것이 타당하지 않을 수 있습니다. 추상 클래스는이 기능을 제공합니다. 추상 클래스 사용의 또 다른 좋은 예는 abstract factory pattern입니다.
구체적인 구현을 제공하지만 인스턴스화를 허용하지 않기 위해 추상 클래스를 사용합니다. 혼자 서있을 수 없다면 항상 이해할 수없는 일반 클래스를 인스턴스화 할 수 있습니다. 동시에 모든 구현 클래스에서 동일한 구현이있는 경우 인터페이스가 충분하지 않을 수 있습니다. 추상 클래스로 충분합니다.
- 인터페이스 : 계약에만, 아니 구현, 아니 인스턴스
- 추상 클래스 : 계약, 일부 구현, 아니 인스턴스
- 등급 : 정규 수업과는 달리 계약, 구현, 인스턴스
3 위 1 위 계약 가능합니다. 계약은 해당 메소드의 선언을 의미하기 때문에 "추상"을 의미합니다. 그리고 컴파일러는 추상 클래스로 변환한다. 왜 정상적인 클래스에서 계약이 가능한가? 논리가 잘못 되었다면 제게 올바른 말을하십시오. – devsda
, abstract
클래스는 abstract
개의 메소드를 포함 할 수 있습니다. 인터페이스 멤버와 매우 유사합니다.
정규 수업은 모든 구현을 제공해야하는 등, 다른 클래스에서 파생 필드 & 중첩 된 유형을 포함, 그들은 방법을 구현할 수 있습니다
한편, 그들은 단지 정규 수업이 할 수있는 다른 모든 것들에 대해 할 수있는 행동 양식.
인터페이스를 사용하면 이 아닌에 모든 구현에 대한 구현을 제공해야합니다.
추상 클래스는 구현을 포함하는 메소드를 모두 가질 수 있고 구현을 제공하지 않지만 상속 클래스를 제공해야하는 메소드를 가질 수있는 유일한 유형의 클래스입니다.
구현없이 메소드를 추가 할 수 있다는 사실은 추상 클래스를 인스턴스화 할 수없는 이유입니다. 모든 메소드에 대한 구현이있는 인스턴스 만 인스턴스화 할 수 있습니다.
참조 : http://stackoverflow.com/questions/56867/interface-vs-base-class –
[템플릿 방법 디자인 패턴] (http://sourcemaking.com/design_patterns/template_method)을보세요. 추상 클래스는 거기에 대신 할 수 있습니다. – rafek