# Classes Basically kotlin syntax. ## Create a new instance of a class `new` not required, in fact, forbidden. ```thp let dog = Dog() ``` ## Simple class Why'd you do this tho? ```thp class SimpleClass let instance = SimpleClass() ``` ## Properties & methods ```thp class SimpleClass { // Properties are private by default mut String? name = ... // Made public with `pub` pub mut String? surname = ... // Methods are private by default fun display_name() { // `$` is used instead of $this. Mandatory print($name) } pub fun get_name() -> String? { $name } } ``` ## Static members no ## Constructor Kotlin style ```thp class Cat( // If a parameter has pub, protected or private they are promoted to properties private String name, pub mut Int lives = 9, protected String surname = "Doe", ) { pub fun get_name() -> String { $name } pub fun die() { $lives -= 1 if $lives <= 0 { print("Cat {$name} is death") } else { print("Cat {$name} is life still") } } } val michifu = Cat("Michifu") print(michifu.get_name()) ``` With kotlin's `init` block. ```thp class Dog(pub String name) { Int name_length init { print("Dog has been instantiated") $name_length = name.length() } } ``` ## Inheritance Kotlin style ```thp class Animal(pub String name) { pub fun say_name() { print($name) } } class Cat(String name, Int lives) -> Animal(name) Cat("Michi", 9).say_name() ```