open class Point(var x: Double, var y: Double) { open fun show() { print("($x, $y)") } open fun info() { print("x: $x, y: $y") } fun move(dx: Double, dy: Double) { x += dx; y += dy } fun moveAndShow(dx: Double, dy: Double) { move(dx, dy) show() } } class ColorPoint(x: Double, y: Double, var color: String): Point(x, y) { override fun show() { print("($x, $y)") } override fun info() { super.info() print(", color: $color"); } } class DeepPoint(x: Double, y: Double, var depth: Int): Point(x, y) { override fun show() { if (depth <= 0) { print("$x, $y") } else { print("(".repeat(depth) + "$x, $y" + ")".repeat(depth)) } } override fun info() { super.info() print(", depth: $depth"); } }