Carbon语言 继承与抽象
Carbon只支持单继承,不支持多重继承。值得注意的是普通的class关键字定义的类型默认都是final的,即不能被继承生成子类。但 abstrct class 和 base class 关键字定义的类型可以被继承。
// 抽象类(abstract class)不能被实例化,因为其中可能包含抽象方法 abstract class UIWidget { // 抽象方法(abstract fn)没有实现 abstract fn Draw[me: Self](s: Screen); abstract fn Click[addr me: Self*](x: i32, y: i32); } // base class 允许扩展和实例化 base class Button extends UIWidget { // 实现抽象方法 impl fn Draw[me: Self](s: Screen) { ... } impl fn Click[addr me: Self*]; // 新增了一个虚函数(virtual fn) virtual fn MoveTo[addr me: Self*](x: i32, y: i32); } // 类外实现方法 fn Button.Click[addr me: Self*](x: i32, y: i32) { ... } fn Button.MoveTo[addr me: Self*](x: i32, y: i32) { ... } class ImageButton extends Button { ... }
abstrct class 就是抽象类,它不能被实例化,因为其中有抽象方法。抽象类与抽象方法的概念和Java类似。抽象方法等同于C++中的纯虚函数。
base class不仅是可以被继承(扩展)的类,还能实例化。因为它里面不会有抽象方法,所有继承而来的抽象方法都要被实现。
base class中也能用virtual修饰成员函数,这个语法是从C++中的虚函数而来的。
泛型接口用于做泛型代码的类型检查。interface Summary { fn Summarize[me: Self]() -> String;}这个interface不是Java中的 interface,而 ...