Наследование
В 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
Was this helpful?