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

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

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

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

```csharp
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` конструктор класса-наследника может по цепочке вызывать конструктор базового класса.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://vala.gitbook.io/vala/untitled/oop/inheritance.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
