🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
在许多OO语言中,存在对于抽象类的格式化定义。一个抽象类不能被它本身实例化,必须被其子类来提供用途。 这可能就是blog例子中BaseEntry类的形式。类只提供一些Article和BlogEntry通用的基础,其实例并未真的创建。要禁止这个可能性并获得一个简短的抽象类,BaseEntry的构造器的访问修饰符可以修改为 private 。 ~~~ private function new (title : String, content : String) ~~~ 现在尝试实例化BaseEntry类,会在编译时抛出一个错误。 有时把抽象概念应用到方法非常有用。在这个情况,基类只声明函数签名,委托实际的实现到它的后代。要执行这类的约束,基类定义一个函数总是会抛出错误;如果这个函数没有在后代中重载,代码的执行会被抛出的错误阻止。 ~~~ class Animal { public function speak() : String { throw “abstract method, provide an implementation in the sub-class”; return null; } } class Dog extends Animal { public function new() { } public override function speak() : String { return “bark!”; } } class Cat extends Animal { public function new() { } public override function speak() : String { return “meow!”; } } ~~~ 错误处理在以后介绍。现在,足以知道 throw 只是创建一个错误到代码流程。另外,这个例子整个 Animal 类是抽象的,不能被实例化,因为它根本就不包含一个构造器。