Polymorphic copy: Difference between revisions

Content added Content deleted
m (→‎{{header|Sidef}}: changed Sys.copy() to Object.dclone())
(Added Kotlin)
Line 1,121: Line 1,121:
}
}
}</lang>
}</lang>

=={{header|Kotlin}}==
<lang scala>// version 1.1.2

open class Animal(val name: String, var age: Int) {
open fun copy() = Animal(name, age)
override fun toString() = "Name: $name, Age: $age"
}

class Dog(name: String, age: Int, val breed: String) : Animal(name, age) {
override fun copy() = Dog(name, age, breed)

override fun toString() = super.toString() + ", Breed: $breed"
}
fun main(args: Array<String>) {
val a: Animal = Dog("Rover", 3, "Terrier")
val b: Animal = a.copy() // calls Dog.copy() because runtime type of 'a' is Dog
println("Dog 'a' = $a") // implicitly calls Dog.toString()
println("Dog 'b' = $b") // ditto
println("Dog 'a' is ${if (a === b) "" else "not"} the same object as Dog 'b'")
}</lang>

{{out}}
<pre>
Dog 'a' = Name: Rover, Age: 3, Breed: Terrier
Dog 'b' = Name: Rover, Age: 3, Breed: Terrier
Dog 'a' is not the same object as Dog 'b'
</pre>


=={{header|NetRexx}}==
=={{header|NetRexx}}==