다른 구문과 사용할 수있는 위치에 따라 둘 다 매우 밀접하게 관련되어 보입니다. 주요 차이점은 무엇입니까?추상 및 가상 동일한 의미?
2
A
답변
7
추상화는 파생 클래스가 가상 클래스를 구현해야한다는 것을 의미합니다 (가상 클래스는 그렇지 않을 수도 있지만 필수는 아닙니다). 이것은 가상 메소드가 수행하는 동안 추상 메소드에는 관련 본문이 없다는 사실에서 유래합니다.
0
멤버를 추상으로 정의하면 기본 구현을 제공하지 않고 일종의 자리 표시자를 정의하게됩니다. 기본 클래스와 상호 작용하는 모든 클라이언트 코드는 여전히 추상 자리 표시 자 멤버를 참조 할 수 있습니다. 인스턴스의 구체적인 클래스가 구체적 구현을 제공해야한다는 것을 알고 있으면 안전합니다.
가상으로 멤버를 정의하면 파생 클래스가 기본 클래스의 정의를 재정의하는 구현을 제공 할 수 있습니다. 차이점은 파생 클래스가 자체 구현을 제공하지 않으면 기본 클래스의 구현이 사용된다는 것입니다.
는 다음 C# 예제 클래스를 생각해
abstract class TaskBase {
public abstract void RunTask();
}
class RoadNetwork {
public string GetCorrectSideToDriveOn() { return "left"; }
}
TaskBase
클래스의 디자인은 코드가없이 컴파일하지 않기 때문에 RunTask()
의 자신의 구현을 제공하는 파생 클래스를 강제로. 설계자는 "작업은 실행 가능해야하지만, 의미있는 기본값이 없으므로 구현을 제공해야합니다."라고 효과적으로 말합니다.
RoadNetwork
클래스의 디자인은 다르게 작동하십시오 RoadNetwork
가 자동으로 특별히 나빠서 운전을 선택하지 않는 한, 운전을하는 도로의 올바른 쪽을 사용합니다 구현하는 사람, 당신은으로 갈 수
) 지금까지 추상 메소드가 (특별한 종류의) 가상 메소드이기도합니다. – GolezTrol