abstract class GeoObject { def symbolize: String } class Point extends GeoObject { def symbolize: String = "." } class Circle(r: Double) extends GeoObject { def symbolize: String = "O" def area: Double = r * r * 3.14 } val p = new Point val c = new Circle(2.0) p.symbolize c.symbolize c.area