abstract class Item {
def price: Double
def description: String
}
class SimpleItem(override val price: Double, override val description: String) extends Item {}
class Bundle(initialItems: SimpleItem*) extends Item {
val items: collection.mutable.Buffer[SimpleItem] = initialItems.toBuffer
def price = items.map(_.price).sum
def description = items.map(_.description).mkString("+")
def add(item: SimpleItem) = items.append(item)
}
val b = new Bundle(new SimpleItem(3.5, "Coffee"), new SimpleItem(2, "Cookie"))
s"${b.description} is ${b.price}$$"