Challenge 1: Open Class & Override — Solution open class Employee(val name: String) { open fun payDescription() = "$name receives a standard salary" } class Manager(name: String, val bonus: Double) : Employee(name) { override fun payDescription() = "$name receives a standard salary plus a $bonus bonus" } fun main() { val staff: Employee = Manager("Alice", 5000.0) println(staff.payDescription()) } /* Output: Alice receives a standard salary plus a 5000.0 bonus Notes: - staff is declared with the Employee type, but holds a Manager instance. Calling payDescription() still runs Manager's override — this is polymorphism: the actual object's type decides which method body runs, not the declared variable type. - Employee needed "open class" and "open fun payDescription()" for this to compile at all; both class and method are final by default in Kotlin. - Manager's constructor passes name straight through to Employee's constructor via ": Employee(name)". */