D 提供类似于 Java/C++ 的类和接口。
任意 class 类型都隐式继承自 Object。
class Foo { } // 继承自 Object
class Bar : Foo { } // Bar 也是一个 Foo
在 D 中通常使用 new 在堆上实例化对象:
auto bar = new Bar;
类对象是总是一个引用类型,并且不像 struct 它们是不会复制值的。
Bar bar = foo; // bar 指针指向 foo
垃圾收集器将在确保对象不在存在任何引用时释放内存。
当一个基类的成员函数被重写,必须显示写明 override 。这样可以防止无意识的重写函数。
class Bar : Foo {
override functionFromFoo() {}
}
在 D 中,类只能继承自一个类(译者注:防止了 C++ 中的菱形继承)。
final ,这样可以禁止在重写它。
abstract,这样可以强制子类(派生类)重写它。
abstract ,这样可以保证它不能被实例化。
super(..) 来显式调用基类的构造函数。
对于类对象,== 和 != 比较对象的内容,所以对比 null 是无效的,因为 null 没有内容。 is 关键字比较相同身份,e1 !is e2 比较不同身份。(译者注:即 is 检查指针引用)
MyClass c;
if (c == null) // 错误
...
if (c is null) // ok
...
对于 struct 对象会比较所有的比特位。对于其他类型,检查个体与内容比较相同。