■ 抽象方法
抽象方法是指没有任何实现,没有函数体的方法。
在实际使用的时候,利用默认定义的实现或继承父类提供的实现。
要利用抽象方法,需要使用abstract关键字。同时,因为没有实现,所以声明成员时所要用到的类本身的引用名是不必要的,取而代之的是,需要书写方法的类型名。
同时,为了提供默认实现,需要使用default关键字。
type Animal = class |
动物会叫,所以这个Animal类将动物会叫这个特性抽象化,变成了Bark抽象方法。然后,利用default关键字,提供了默认实现。
■ 重载
我们已介绍过子类可以继承父类,然后在父类的基础上改写一部分父类的功能。声明成抽象方法的成员也可以被继承了之后在子类中进行修改,这就叫方法的重载(用member声明的成员不能被重载。)重载是面向对象中用来实现多态性的功能之一。
使用override来实现函数重载。首先继承Animal类,然后创建Dog类与cat类。
type Dog = class inherit Animal |
因为Cat类的鸣叫声与众不同,所以重载了Bark方法。Dog类与Animal类的行为大致相同,基本上没有什么处理。
■ 抽象类
虽然这里创建的Animal类默认鸣叫声为“汪汪”,但是动物默认的鸣叫声为“汪汪”的话,这种设计是不好的。因此,如果能定义不提供默认实现,只提供抽象方法的类可能是最好的。
下例中声明用AbstractClass将类指定成抽象类,从而实现这一想法(只提供抽象方法,不提供默认实现的类)。
[<AbstractClass>] |
现在因为Animal只是抽象类,所以不能被实例化了。
象上例中那样只具有抽象方法的抽象类的情况,用接下来介绍的接口会更加适合。使用抽象类的目的大部分是为了让类能提供某种程度的实现,而只想将一部分方法转变成抽象方法。