2013-10-09 2 views
0

PHP에서 비 추상 클래스보다 추상 클래스를 사용하여 몇 시간 씩 많은 이점을 찾았습니다. 나는 추상적 인 클래스가 싱글 톤 디자인 패턴의 좋은 특징 인 인스턴스화 될 수 없다는 것을 안다. 그러나 요점은 두 클래스 모두 기본 클래스로 사용할 수 있기 때문에 추상 클래스를 사용하는 다른 이유가 있을까요? 이 중 하나와 같은 대답은 모두 What are the advantage if i use abstract class in php? 발견하지 못했습니다. 다른 질문에 대답했습니다. 즉 기본 클래스를 사용하면 어떤 이점이 있습니까? 그래서, 내 질문에 거기에 인스턴스화 할 수 없다는 것을 제외하고 기본 기본 클래스 이외의 추상 기본 클래스를 사용하는 이유가 무엇입니까?상속 할 때 추상 클래스와 비 추상 클래스의 차이점은 무엇입니까

+0

"추상 클래스는 싱글 톤 디자인 패턴의 좋은 특징 인 인스턴스화 될 수 없습니다"하나는 다른 것과 많이 관련이 없습니다. [소프트웨어 디자인 패턴에 대해 읽어보십시오.] (http://www.amazon.com /Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612/ref=sr_1_1?ie=UTF8&qid=1381309494&sr=8-1&keywords=Design+Patterns.+Elements+of+Reusable+Object-Oriented+Software) – feeela

+0

Being 어떤 방법 으로든 나중에 구현할 수 있습니까? – CosminO

+0

응용 프로그램을 어떻게 디자인 하느냐에 따라 크게 달라집니다. "항상 좋습니다"규칙은 없습니다. 때로는 다른 것을 사용하는 것이 더 나을 때도있다. –

답변

1

추상 클래스는 직접 인스턴스화 할 수 없지만 추상 및 비 추상 메서드를 모두 포함 할 수 있습니다.

추상 클래스를 확장하는 경우 모든 추상 함수를 구현하거나 하위 클래스 추상화를 수행해야합니다.

일반 메서드를 재정의하고 추상화 할 수는 없지만 (결국) 모든 추상 메서드를 재정의해야하며이를 추상화하지 않아야합니다.

요약 키워드는 클래스 또는 메소드에 패턴으로 레이블을 지정하는 데 사용됩니다. 인터페이스와 비슷하지만 메소드의 변수와 구현을 포함 할 수 있습니다.

추상 클래스와 관련하여 많은 오해가 있습니다. 다음은 추상 Dog 클래스의 예제입니다. 개발자가 다른 개발자를위한 기본 Dog 클래스를 만들거나 자신을 확장하려는 경우 클래스를 추상으로 선언합니다. Dog 클래스를 직접 인스턴스화 할 수는 없습니다 (아무도 할 수는 없지만). 자신의 클래스로 Dog를 확장 할 수 있습니다. SmartDog는 Dog 등을 확장합니다.

Dog 클래스에 의해 추상이라고 선언 된 모든 메소드는 Dog를 확장하는 각 클래스에서 수동으로 구현해야합니다.

예를 들어, 요약 class Dog의 추상화 방법은 Dog::Bark()입니다. 그러나 모든 개들은 다르게 짖는다. 그러므로 각 Dog-Subclasses에서 개가 어떻게 짖는지를 설명해야합니다. 예를 들어 SmartDog::Bark()을 정의해야합니다.

+0

'Dog :: Bark()'의 논리는'SmartDog :: Bark()'에 대한 자체 논리를 구현 중이라도 그대로 유지된다. 내 말은, 개가 그 입으로 짖고 그것의 구현이'Dog :: Bark()'에 있다면, 그 개가'SmartDog :: Bark()'에서 입으로 껍질을 벗기거나 논리를 재 선언해야한다는 것입니다 그대로있을거야. –

관련 문제