Menu

Классы

D поддерживает классы и интерфейсы подобно Java или C++.

Любой тип class неявно наследуется от Object.

class Foo { } // наследуется от Object
class Bar: Foo { } // Bar тоже является Foo

Классы в D, как правило, создаются на куче с помощью new:

auto bar = new Bar;

Объекты классов всегда являются ссылочным типом и, в отличие от структур, не копируются по значению.

Bar bar = foo; // bar - ссылка на foo

Сборщик мусора позаботится о том, чтобы память была освобождена, когда ссылок на объект не останется.

Наследование

Если метод основного класса переопределяется, нужно использовать ключевое слово override, чтобы обозначить это. Это предотвращает случайное переопределение функций.

class Bar: Foo {
    override functionFromFoo() {}
}

В D классы могут наследоваться только от одного родительского класса.

Конечные и абстрактные методы классов

Метод может быть помечен как final в основном классе, чтобы запретить его переопределение. Метод может быть объявлен абстрактным (abstract), тогда его необходимо будет реализовать в наследующих классах. Весь класс может быть объявлен abstract, это гарантирует, что не будет создан его экземпляр. Для доступа к основному классу используется ключевое слово super.

Подробнее

rdmd playground.d