2011-01-06 2 views

답변

7

추상화는 파생 클래스가 가상 클래스를 구현해야한다는 것을 의미합니다 (가상 클래스는 그렇지 않을 수도 있지만 필수는 아닙니다). 이것은 가상 메소드가 수행하는 동안 추상 메소드에는 관련 본문이 없다는 사실에서 유래합니다.

+0

) 지금까지 추상 메소드가 (특별한 종류의) 가상 메소드이기도합니다. – GolezTrol

0

멤버를 추상으로 정의하면 기본 구현을 제공하지 않고 일종의 자리 표시자를 정의하게됩니다. 기본 클래스와 상호 작용하는 모든 클라이언트 코드는 여전히 추상 자리 표시 자 멤버를 참조 할 수 있습니다. 인스턴스의 구체적인 클래스가 구체적 구현을 ​​제공해야한다는 것을 알고 있으면 안전합니다.

가상으로 멤버를 정의하면 파생 클래스가 기본 클래스의 정의를 재정의하는 구현을 제공 할 수 있습니다. 차이점은 파생 클래스가 자체 구현을 제공하지 않으면 기본 클래스의 구현이 사용된다는 것입니다.

는 다음 C# 예제 클래스를 생각해

abstract class TaskBase { 
    public abstract void RunTask(); 
} 

class RoadNetwork { 
    public string GetCorrectSideToDriveOn() { return "left"; } 
} 

TaskBase 클래스의 디자인은 코드가없이 컴파일하지 않기 때문에 RunTask()의 자신의 구현을 제공하는 파생 클래스를 강제로. 설계자는 "작업은 실행 가능해야하지만, 의미있는 기본값이 없으므로 구현을 제공해야합니다."라고 효과적으로 말합니다.

RoadNetwork 클래스의 디자인은 다르게 작동하십시오 RoadNetwork가 자동으로 특별히 나빠서 운전을 선택하지 않는 한, 운전을하는 도로의 올바른 쪽을 사용합니다 구현하는 사람, 당신은으로 갈 수