Object

Object is the implicit root class. Every user-defined class (created with Class:Create) automatically extends Object and inherits its three methods. Built-in modules (Konsol, Math, File, etc.) are handlers and do not extend Object.


Object methods

All instances of user-defined classes have these methods available:

Method Returns Description
.getType() String Class name of this instance
.toString() String "[ClassName]"
.isInstanceOf(String t) Boolean true if this instance is a t or subclass of t
Class:Create(Animal) {
    Var:String name;
}

Var:Animal a;
a.name = "Rex";

Var:String t;
t = a.getType();
Konsol:Print(t);                        // Animal

Var:String s;
s = a.toString();
Konsol:Print(s);                        // [Animal]

Var:Boolean check;
check = a.isInstanceOf("Animal");
Konsol:Print(check);                    // true

check = a.isInstanceOf("Object");
Konsol:Print(check);                    // true

→ See also: Exception - built-in error carrier for try / catch


Examples

// 18_object.ks - Object root class: getType, toString, isInstanceOf

Konsol:Print("=== Object Root Class ===");

// Every class implicitly extends Object.
// No 'extends' keyword needed - the engine wires it automatically.

Class:Create(Animal) {
    Var:String name;
    function setName(String n) { name = n; }
}

Class:Create(Dog extends Animal) {
    Var:String breed;
    function setBreed(String b) { breed = b; }
}

Class:Create(Cat extends Animal) {
    Var:String color;
}

Class:Create(Vehicle) {
    Var:Number wheels;
}

// ── getType ───────────────────────────────────────────────────────────────────
// getType() returns the class name as a String.
// Capture the return value with a typed variable - _ret is not set by the engine.
Konsol:Print("--- getType ---");

Class:Dog d;
d.setName("Rex");
d.setBreed("Labrador");
Var:String r = d.getType();
Konsol:Print("dog getType = ${r}");       // Dog

Class:Cat c;
c.name = "Whiskers";
r = c.getType();
Konsol:Print("cat getType = ${r}");       // Cat

Class:Vehicle v;
v.wheels = 4;
r = v.getType();
Konsol:Print("vehicle getType = ${r}");   // Vehicle

// ── toString ──────────────────────────────────────────────────────────────────
Konsol:Print("--- toString (default) ---");

r = d.toString();
Konsol:Print("dog toString = ${r}");      // [Dog]

r = c.toString();
Konsol:Print("cat toString = ${r}");      // [Cat]

r = v.toString();
Konsol:Print("vehicle toString = ${r}");  // [Vehicle]

// ── toString override ─────────────────────────────────────────────────────────
// Override with a typed return - use `return`, not `_ret`.
Konsol:Print("--- toString override ---");

Class:Create(Point) {
    Var:Number x;
    Var:Number y;

    function toString() : String {
        return "Point(" + x + ", " + y + ")";
    }
}

Class:Point p;
p.x = 3;
p.y = 7;
r = p.toString();
Konsol:Print("point toString = ${r}");    // Point(3, 7)

r = p.getType();
Konsol:Print("point getType  = ${r}");   // Point

// ── isInstanceOf ──────────────────────────────────────────────────────────────
// isInstanceOf() returns a Boolean. Assign to a Var:Boolean to capture it.
Konsol:Print("--- isInstanceOf ---");

Var:Boolean b;
b = d.isInstanceOf("Dog");
Konsol:Print("dog isInstanceOf Dog     = ${b}");   // true

b = d.isInstanceOf("Animal");
Konsol:Print("dog isInstanceOf Animal  = ${b}");   // true

b = d.isInstanceOf("Object");
Konsol:Print("dog isInstanceOf Object  = ${b}");   // true

b = d.isInstanceOf("Cat");
Konsol:Print("dog isInstanceOf Cat     = ${b}");   // false

b = d.isInstanceOf("Vehicle");
Konsol:Print("dog isInstanceOf Vehicle = ${b}");   // false

b = c.isInstanceOf("Cat");
Konsol:Print("cat isInstanceOf Cat     = ${b}");   // true

b = c.isInstanceOf("Animal");
Konsol:Print("cat isInstanceOf Animal  = ${b}");   // true

b = c.isInstanceOf("Dog");
Konsol:Print("cat isInstanceOf Dog     = ${b}");   // false

b = v.isInstanceOf("Vehicle");
Konsol:Print("veh isInstanceOf Vehicle = ${b}");   // true

b = v.isInstanceOf("Animal");
Konsol:Print("veh isInstanceOf Animal  = ${b}");   // false

// ── Polymorphic-style dispatch using getType ──────────────────────────────────
Konsol:Print("--- type-based dispatch ---");

function describeAnimal(String typeName, String name) {
    if (typeName == "Dog") {
        Konsol:Print("${name} is a dog -- fetch!");
    } else if (typeName == "Cat") {
        Konsol:Print("${name} is a cat -- meow!");
    } else {
        Konsol:Print("${name} is an unknown animal");
    }
}

Class:Dog d2;
d2.name = "Buddy";
Var:String d2type = d2.getType();
describeAnimal(d2type, d2.name);

Class:Cat c2;
c2.name = "Luna";
Var:String c2type = c2.getType();
describeAnimal(c2type, c2.name);