2011-01-06 16 views

答えて

7

抽象的な派生クラスは強制的に実装することを意味しますが、仮想の場合はそうではありません(必須ではありません)。これは、抽象メソッドには関連する本体がなく、仮想メソッドではないという事実に由来します。

+0

、彼らは特に間違った側に駆動するために選択しない限りRoadNetworkを実装して誰もが自動的にオン駆動するために、道路の正しい側を使用します。

RoadNetworkクラスのデザインは異なる動作を抽象メソッドが(特別な種類の)仮想メソッドであるとまでは限りません。 – GolezTrol

0

メンバを抽象として定義すると、デフォルトの実装を提供せずに、ある種のプレースホルダを定義しています。基本クラスと対話するクライアントコードは、インスタンスの具象クラスが具体的な実装を提供していなければならないという知識の中で、抽象的なプレースホルダメンバを参照できます。

メンバーを仮想として定義すると、派生クラスで基本クラスの定義をオーバーライドする実装を提供できます。違いは、派生クラスが独自の実装を提供しない場合、基本クラスからの実装が使用されることです。

は、次のC#の例のクラスを考えてみましょう:

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

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

TaskBaseクラスのデザインは、コードはそれなしでコンパイルされませんので、RunTask()の独自の実装を提供する派生クラスを強制します。設計者は、「タスクは実行可能でなければなりませんが、意味のあるデフォルトがないため実装を提供する必要があります」と効果的に言っています。あなたが行くことができるよう)

関連する問題