> For the complete documentation index, see [llms.txt](https://wiki.aegis-mine.ru/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://wiki.aegis-mine.ru/modifications/sozdanie-kontenta/crafttweaker/minecraft-1.19.2/oop.md).

# ООП

Поговорим про наследование, ведь zenScript считается полноценным ЯП.

Создадим `virtual` класс `myEntity`, у которого будет параметр имени и метод `move`, не имеющий пока что действий.

## **Пример**

```java
public virtual class myEntity {
    public val name as string;
    public this(name as string) {
        this.name = name;
    }
    
    public move() as void {
        
    }
}
```

`virtual` означает, что мы сможем переопределить функции класса и сам класс. Создадим новый класс `myFish` и через `:` напишем `myEntity`. `:` - это будет значить, что мы наследуемся от следующего класса.

## **Пример**

```java
public class myFish : myEntity {
    public this() {
        super("bat");
    }
}
```

Про `suepr` прочитайте в документации по <mark style="color:blue;">**Java**</mark>. Переопределим наш метод `move` из класса `myEntity` в классе `myFish` с помощью `override`. Сделаем так, чтобы при вызове метода `move` в консоль выводилось какое-то сообщение.

```java
public override move() {
    println("Существо " + this.name as string + " перемещается !");    
}
```

Если мы вызовем данный метод, нам напечатается сообщение в `crafttwekaer.log`.

## **Пример**

```java
new myFish().move();
```

## **Полный Код**

```java
public virtual class myEntity {
    public val name as string;
    public this(name as string) {
        this.name = name;
    }
    
    public move() as void {
        
    }
}

public class myFish : myEntity {
    public this() {
        super("bat");
    }

    public override move() {
        println("Существо " + this.name as string + " перемещается !");
    }
}
```
