Classes are the primary way you organize your code within kits. Classes are named containers for fields and methods. A field or method definition is called a slot and identified by a unique name within a given class. Slots may not be overloaded by name, which means you cannot declare a field and method to have the same name (allowed in Java). Nor can you declare multiple methods with the same name overloaded by parameters (allowed in both Java and C#).

You can declare multiple classes in a single source file, although by convention each class is placed in its own source file with the same name. For example the class "Thing" would be declared in the file "Thing.sedona".


By default a class is public, or you can explicitly use the public keyword. Alternatively use the internal keyword to declare a class that only has visibility within its kit.

The abstract keyword is used with classes that can never be instantiated directly. Any class that declares abstract methods must be marked abstract.

Use the final class modifier to prevent a class from being subclassed.


The Sedona Framework supports inheritance much like Java or C#. However, there is no support for interfaces or any type of multiple inheritance.

Similar to Java, all Sedona classes implicitly extend sys::Obj, a class with no fields or methods of its own. To support polymorphism and virtual methods, however, a Sedona class (or some class in its hierarchy) must explicitly extend sys::Virtual, which allocates space for the virtual table.

The syntax for inheritance looks just like Java with the extends keyword:

abstract class Shape extends Virtual
  abstract int area()

class Square extends Shape
  override int area() { return width * width }
  int width

Note that extending Virtual has some memory impact: In addition to the space required for the type's virtual table, it imposes a two byte overhead per class instance.