September 2017 Update
This commit is contained in:
parent
bba7bfd280
commit
ba8067c3b7
14570 changed files with 153136 additions and 63871 deletions
56
Task/Polymorphism/Kotlin/polymorphism.kotlin
Normal file
56
Task/Polymorphism/Kotlin/polymorphism.kotlin
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
// version 1.1.2
|
||||
|
||||
open class Point(var x: Int, var y: Int) {
|
||||
constructor(): this(0, 0)
|
||||
|
||||
constructor(x: Int) : this(x, 0)
|
||||
|
||||
constructor(p: Point) : this(p.x, p.y)
|
||||
|
||||
open protected fun finalize() = println("Finalizing $this...")
|
||||
|
||||
override fun toString() = "Point at ($x, $y)"
|
||||
|
||||
open fun print() = println(this)
|
||||
}
|
||||
|
||||
class Circle(x: Int, y: Int, var r: Int) : Point(x, y) {
|
||||
constructor(): this(0, 0, 0)
|
||||
|
||||
constructor(x: Int) : this(x, 0, 0)
|
||||
|
||||
constructor(x: Int, r: Int) : this(x, 0, r)
|
||||
|
||||
constructor(c: Circle) : this(c.x, c.y, c.r)
|
||||
|
||||
// for simplicity not calling super.finalize() below though this would normally be done in practice
|
||||
override protected fun finalize() = println("Finalizing $this...")
|
||||
|
||||
override fun toString() = "Circle at center ($x, $y), radius $r"
|
||||
|
||||
override fun print() = println(this)
|
||||
}
|
||||
|
||||
fun createObjects() {
|
||||
val points = listOf(Point(), Point(1), Point(2, 3), Point(Point(3, 4)))
|
||||
for (point in points) point.print()
|
||||
val circles = listOf(Circle(), Circle(1), Circle(2, 3), Circle(4, 5, 6), Circle(Circle(7, 8, 9)))
|
||||
for (circle in circles) circle.print()
|
||||
println()
|
||||
}
|
||||
|
||||
fun main(args: Array<String>) {
|
||||
createObjects()
|
||||
System.gc() // try and force garbage collection
|
||||
Thread.sleep(2000) // allow time for finalizers to run
|
||||
println()
|
||||
val p = Point(5, 6)
|
||||
p.print()
|
||||
p.y = 7 // change y coordinate
|
||||
p.print()
|
||||
val c = Circle(5, 6, 7)
|
||||
c.print()
|
||||
c.r = 8
|
||||
c.print() // change radius
|
||||
/* note that finalizers for p and c are not called */
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue