Classes and constructors
class Car(val brand: String, var speed: Int = 0) {
fun accelerate(by: Int) { speed += by }
}
val c = Car("Tata")
c.accelerate(20)
Data classes
data class User(val id: Int, val name: String)
val u = User(1, "Anand")
val u2 = u.copy(name = "Gaur") // free copy(), equals(), toString()
Interfaces & inheritance
interface Shape { fun area(): Double }
open class Animal(val name: String) {
open fun sound() = "..."
}
class Dog(name: String) : Animal(name) {
override fun sound() = "Woof"
}
Objects & companions
object Config { const val VERSION = "1.0" } // singleton
class Repo {
companion object {
fun create() = Repo() // like a static factory
}
}
Tip: Classes are final by default — mark them open to allow inheritance. Favour composition and data classes over deep hierarchies.