Abstract は、
Virtualの特別な形です。
違いは、抽象メソッドは、本体がなく、宣言だけです。
基本的に、これは、いろいろな派生タイプによって実装されることができるインターフェースの宣言を許します。
抽象メソッドを呼ぶために、抽象メソッドは派生データ型によって置き換えられ、実行されます。でなければ、プログラムは停止します。
その結果、抽象メソッドをすべて実装する型だけが、オブジェクトをつくることができます。
同じ理由から、構築子は、実装されていないメソッドを呼んではいけません。
Constructors は仮想になりえないので、
Constructors は抽象になりえません。
さらに、破壊子本体(暗黙であれ明示であれ)は、基礎とフィールドの破壊子を呼ぶために必要なので、抽象の
destructors もサポートされません。
抽象は、C++ (FreeBASIC と異なり、C++ では、純粋な virtuals が本体を持つことができます。しかし静的にだけアクセスできます) では、「純粋、仮想」と呼ばれます。
注:
多重レベル継承では、同じ名前のメソッド(同じ識別子で署名)は、各継承階層レベルで、
Abstractか、
Virtualか、normal (指定子なし) 、と宣言することができます。
指定子が混ざっている場合、通常は、継承階層のトップから底まで、abstract -> virtual -> normal の順です。
上書き方法のアクセス・コントロール(
Public/
Protected/
Private)は、内部多形プロセスによってではなく、コンパイル時に最初の呼び出しのためにのみ考慮されます。
派生した静的方法は、基礎 virtual/abstract メソッドを上書きすることができません。しかしどんな基礎メソッド(virtual/abstract を含む)も、陰にすることはできます。