Skip to content
本文 下载 Markdown

类与接口 ​

类将字段与方法放在一起。字段默认只在当前模块可见;需要从外部访问时加 pub。

构造与继承 ​

kelyra
class Counter {
  pub value: i32;
  pub init(start: i32) { this.value = start; }
  pub fn next() -> i32 {
    value = value + 1;
    return value;
  }
}

类可以继承基类;虚方法使用 @virtual,覆写方法使用 @override。super 可访问基类实现。

接口 ​

@interface class 定义行为契约。下面的测试同时展示了接口、基类、覆写和接口指针。

kelyra
@interface
class Reader {
  pub fn read() -> i32;
  pub fn adjust(value: i32) -> i32;
}
class Base: Reader {
  @virtual
  pub fn read() -> i32 { return 40; }
  pub fn adjust(value: i32) -> i32 { return value + 1; }
}
class Child: Base {
  @override
  pub fn read() -> i32 { return super.read() + 1; }
}
class Holder {
  reader: *Reader;
  pub init(reader: *Reader) { this.reader = reader; }
  pub fn total() -> i32 { return reader.adjust(reader.read()); }
}
fn expose(base: *Base) -> *Reader { return base; }
@main
fn main() -> i32 {
  let child = Child();
  let base: *Base = &child;
  let holder = Holder(expose(base));
  return holder.total();
}

接口和虚方法按完整参数签名匹配,同名不同参数的方法可以共存。当前接口是类系统的一部分,更多规则见接口设计说明。

认真写代码,也认真写说明。