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

В Vala класс может наследовать от одного класса или вовсе не наследовать. На самом деле это обычно один класс, т.к. здесь нет неявного наследования как это в Java.

При наследовании вы создаете класс, объекты этого подкласса являются объектами и базового класса. Это значит что на них можно проводить те же действия, что и с объектами базового класса, поэтому если потребуется экземпляр базового класса, то экземпляр потомка можно к этому типу привести.

При создании класса у вас есть полный контроль над установкой доступа к методам и полям объекта. Следующий пример демонстрирует ряд таких возможностей:

class SuperClass : GLib.Object {

    private int data;

    public SuperClass(int data) {
        this.data = data;
    }

    protected void protected_method() {
    }

    public static void public_static_method() {
    }
}

class SubClass : SuperClass {

    public SubClass() {
        base(10);
    }
}

data является полем для хранения данных в объектах класса SuperClass. В каждом экземпляре SuperClass будет такое поле, и он объявлен как private, поэтому он доступен внутри класса SuperClass.

protected_method является методом уровня объекта типа SuperClass. Вы можете его вызвать, только если создадите экземпляр класса SuperClass или его потомков, и только из кода внутри SuperClass или его потомков - последнее условие является результатом применения модификатора protected.

public_static_method имеет два модификатора. static значит, что данный метод можно вызвать и без наличия экземпляра класса SuperClass или наследующих от него. Следовательно, метод не будет иметь доступа к ссылке во время выполнения. public значит, что метод можно вызывать из любого места, независимо как он относится к SuperClass или к наследующим от него.

С учетом этих определений, экземпляр подкласса (SubClass) будет содержать все три члена супер-класса (SuperClass), но не будет иметь доступа к открытым членам. Внешний код имеет доступ только к открытым методам.

С помощью base конструктор класса-наследника может по цепочке вызывать конструктор базового класса.

Last updated