Inheritance
In Kotlin, you can extend not only abstract classes but also regular classes. Let’s explore this by extending our Player class. Specifically, we’ll create a ConfusedPlayer class that moves to (y, x) instead of (x, y) when given the coordinates (x, y).
Initially, let’s create a class inheriting from Player:
class ConfusedPlayer(name: String ): ActivePlayer(name)
Here, the round brackets in the abstract classes signify that arguments can be passed to the parent class constructor, similar to Java’s super keyword.
However, this code won’t compile. In Kotlin, all classes are final by default, meaning they can’t be inherited unless marked as open. So, let’s modify the ActivePlayer class to allow for that:
open class ActivePlayer (...) : Moveable(), DiceRoller {
...
}
Next, let’s override the move method for the ConfusedPlayer:
class ConfusedPlayer(name : String): Player(name) {
// move...