Types and OOP Classes

Classes and Constructors

In Klyn, a class is both a runtime type and the main unit of object-oriented design. This page covers class declarations, constructors, instance and static members, file layout rules, and the basics of working with this.

A Simple Class
public class Point:
    public property x as Int = 0
    public property y as Int = 0

    public Point(x as Int = 0, y as Int = 0):
        this.x = x
        this.y = y

    public override toString() as String:
        return f"[{this.x}, {this.y}]"

Constructors are named after the class. There is no separate constructor keyword.

Creating Objects
p1 = Point()
p2 = Point(10, 20)

p3 = Point(
    1,
    2
)

Constructor calls use ordinary call syntax and may span multiple lines when readability benefits.

Instance Members and this

Use this when you want to emphasize that a property or method belongs to the current instance.

public class Counter:
    public property current as Int = 0

    public tick() as Void:
        this.current++

    public reset() as Void:
        this.current = 0
Static Members
public class Settings:
    public static defaultName = "Klyn"

print(Settings.defaultName)

Static members belong to the type, not to a specific instance.

File and Public Class Rules
Klyn is strict here
  • A public class must live in a file with the same name.
  • If the file declares a package, the folder path must match that package.
  • Only one public class should occupy that file.
package my.app.core

public class User:
    pass

The example above belongs in my/app/core/User.kn.

Method Syntax Is Different from Function Syntax

Inside a class body, methods are declared directly with modifiers such as public, private, or static. They do not use the def keyword.