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.
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
// 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);