## With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

No credit card required

# Case Classes

In Matching on Case Classes, we briefly introduced you to case classes. Case classes have several useful features, but also some drawbacks.

Let’s rewrite the `Shape` example we used in A Taste of Concurrency to use case classes. Here is the original implementation:

````// code-examples/IntroducingScala/shapes.scala`

`package` shapes {
`class` `Point`(`val` x:` Double`, `val` y:` Double`) {
`override` `def` `toString`() = `"Point("` + x + `","` + y + `")"`
}

`abstract` `class` `Shape`() {
`def` `draw`():` Unit`
}

`class` `Circle`(`val` center:` Point`, `val` radius:` Double`) `extends` `Shape` {
`def` `draw`() = println(`"Circle.draw: "` + `this`)
`override` `def` `toString`() = `"Circle("` + center + `","` + radius + `")"`
}

`class` `Rectangle`(`val` lowerLeft:` Point`, `val` height:` Double`, `val` width:` Double`)
`extends` `Shape` {
`def` `draw`() = println(`"Rectangle.draw: "` + `this`)
`override` `def` `toString`() =
`"Rectangle("` + lowerLeft + `","` + height + `","` + width + `")"`
}

`class` `Triangle`(`val` point1:` Point`, `val` point2:` Point`, `val` point3:` Point`)
`extends` `Shape`() {
`def` `draw`() = println(`"Triangle.draw: "` + `this`)
`override` `def` `toString`() =
`"Triangle("` + point1 + `","` + point2 + `","` + point3 + `")"`
}
}
```

Here is the example rewritten using the `case` keyword:

````// code-examples/AdvOOP/shapes/shapes-case.scala`

`package` shapes {
`case` `class` `Point`(x:` Double`, y:` Double`)

`abstract` `class` `Shape`() {
`def` `draw`():` Unit`
}

`case` `class` `Circle`(center:` Point`, radius:` Double`) `extends` `Shape`() {
`def` `draw`() = println(`"Circle.draw: "` + `this`)
}

`case` `class` `Rectangle`(lowerLeft:` Point`, height:` Double`, width:` Double ...````

## With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

No credit card required