D cũng có lớp và giao diện như trong Java hay C++.
Lớp bất kỳ thừa kế từ lớp Object
,
hay nói cách khác Object
là mẹ của tất cả các lớp khác trong D.
class Foo { } // thừa kế từ Object
class Bar : Foo { } // Bar cũng là Foo
Lớp được khởi tạo trên bộ nhớ heap
nhờ new
:
auto bar = new Bar;
Đối tượng trong lớp luôn là kiểu tham chiếu, nên không có chuyện
sao chép giá trị như kiểu ghép struct
.
Bar bar = foo; // bar là con trỏ tới foo
Bộ dọn rác giải phóng bộ nhớ khi không còn tham chiếu nào trỏ tới đối tượng của lớp.
Chỉ thị override
dùng khi cần định nghĩa lại hàm từ lớp mẹ.
Việc ép buộc dùng từ khóa là để hạn chế các lỗi do vô ý.
class Bar : Foo {
override functionFromFoo() {}
}
Trong D một lớp chỉ thừa kế từ đúng một lớp khác.
final
, nó được xem là hoàn chỉnh
và các lớp thừa kế không thể định nghĩa lại hàm đó.
abstract
, là các hàm
bắt buộc phải được định nghĩa lại trong các lớp thừa kế.
abstract
, là lớp
không được khởi tạo trên bộ nhớ.
super(..)
dùng để gọi đến hàm khởi tạo của lớp mẹ.
Phép so sánh ==
và !=
dùng cho nội dung đối tượng của lớp.
Vì null
không có nội dung nào, việc dùng hai phép so sánh này với null
là không hợp lệ; bạn cần dùng is
như ví dụ sau:
MyClass c;
if (c == null) // lỗi
...
if (c is null) // tốt
...
Với lớp ghép (struct
) việc so sánh đối tượng diễn ra ở từng bit thông tin.