NEKOVA docs
NEKOVA / Docs / Classes & Objects

Inheritance

extends gives a class a parent's methods — but init isn't inherited automatically.

Basic inheritance

object Animal:
    init(name):
        self.name = name
    func speak():
        return self.name + " makes a sound"

object Dog extends Animal:
    init(name):
        self.name = name
    func fetch():
        return self.name + " fetches the ball"

let d = new Dog("Rex")
show d.speak()   # inherited from Animal
show d.fetch()   # defined on Dog

init is not automatically inherited

A subclass needs its own init, even if it's identical to the parent's — NEKOVA doesn't implicitly call the parent constructor for you:

object Animal:
    name: text
    init(name: text):
        self.name = name
    func describe():
        return f"I am {self.name}"

object Dog extends Animal:
    init(name: text):
        self.name = name

let d = new Dog("Rex")
show d.describe()   # "I am Rex" — describe() is inherited, init is repeated

Overriding a method

object Animal:
    init(name):
        self.name = name
    func speak():
        return self.name + " makes a sound"

object Cat extends Animal:
    init(name):
        self.name = name
    func speak():
        return self.name + " meows"

let c = new Cat("Whiskers")
show c.speak()   # "Whiskers meows" — Cat's own speak() wins