抽象メソッド

抽象メソッドとは、実装を持たないメソッドのことです。 実装がないメソッドが何の役に立つんだ?と思われますが 実際に使用する際には  1.デフォルトの実装を定義するか  2.継承して(実装を提供することによって)利用 します。 抽象メソッドを利用するにはabstractキーワードを用います。 また、実装がないため、通常のメンバの宣言のように 自分自身への参照を持たせる必要はありません。 かわりに、メソッドの型名を記述します。 また、デフォルトの実装を提供するために defaultキーワードを用います。
抽象メソッドを持つクラス
type Animal = class
    new () = {}
    abstract Bark : unit -> unit
    default x.Bark ()= System.Console.WriteLine("wan wan")
    end;;
let a = new Animal() in a.Bark();;
ありがちな例ですが、 動物は鳴く、ということを抽象化したのが このAnimalクラスです。 Barkが抽象メソッドになっています。 そして、defaultキーワードを用いて デフォルトの実装を提供しています。

オーバーライド

クラスの継承で、子クラス側で親クラスの機能の一部を 上書きできると説明しましたが abstractメソッドをつけて宣言したメンバは 子クラス側で上書きすることが出来ます。 これをメソッドのオーバーライドと言います。 (memberで宣言したものはオーバーライドできません) オーバーライドは、オブジェクト指向での 「多態性(Polymorphism)」を実現するための一機能になります。 メソッドをオーバーライドするには overrideキーワードを用います。 先のAnimalクラスを継承して DogクラスとCatクラスを作ってみます。
メソッドのオーバーライド
type Dog = class inherit Animal
    new () = {}
    end;;
type Cat = class inherit Animal
    new () = {}
    override x.Bark () = System.Console.WriteLine("nya- nya-");
    end;;
let a = new Dog() in a.Bark();;
let b = new Cat() in b.Bark();;
Catクラスでは鳴き声を変えるため、 Barkメソッドをオーバーライドしています。 DogクラスはAnimalクラスと同じ動作のため何もしていません。

AbstractClass

ここまでで作成したAnimalクラスは デフォルトで"wan wan"と鳴くという動作をしていましたが 動物がデフォルトで"wan wan"と鳴くというのは 設計的に良くないと思います。 そこで、デフォルトの実装は提供せず 抽象メソッドだけを提供したクラスを定義したいと思うかもしれません。 これを実現するにはAbstractClassを指定してクラスを宣言します。
AbstractClass
[<AbstractClass>]
type Animal = class
    new () = {}
    abstract Bark : unit -> unit
    end;;
type Dog = class inherit Animal
    new () = {}
    override x.Bark () = System.Console.WriteLine("wan wan");
    end;;
type Cat = class inherit Animal
    new () = {}
    override x.Bark () = System.Console.WriteLine("nya- nya-");
    end;;
let a = new Dog() in a.Bark();;
let b = new Cat() in b.Bark();;
Animalクラスは抽象メソッドしかもたないため インスタンス化することは出来ません。 この例のように抽象メソッドだけを持つクラスを宣言するのであれば 次に説明するインタフェースを用いたほうが良いと思います。 AbstractClassを用いるのは ある程度は実装を提供するが 一部のメソッドだけ抽象メソッドにしたい というようなケースになるでしょう。