@startuml
class Bird {
  -wingSpan: double
  +Bird(name: String, birthDate: LocalDate, wingSpan: double)
  +canEat(): boolean
  +canFly(): boolean
  +canWalk(): boolean
  +getWingSpan(): double
  +hashCode(): int
  +equals(obj: Object): boolean
  +toString(): String
}

abstract class Animal {
  -name: String
  -birthDate: LocalDate
  +Animal(name: String, birthDate: LocalDate)
  +canMove(): boolean
  +getName(): String
  +getAge(): float
  +compareTo(anotherAnimal: Animal): int
}

interface Comparable {
  +compareTo(T: T): int
}

interface Moveable {
  +canMove(): boolean
}

interface Walkable {
  +canWalk(): boolean
}

interface Flyable {
  +canFly(): boolean
}

interface Eatable {
  +canEat(): boolean
}

Animal --|> Comparable
Animal --|> Moveable


Bird --|> Animal
Bird --|> Walkable
Bird --|> Flyable
Bird --|> Eatable
@enduml