@startuml Failure Class Diagram abstract BaseFailure { - String BASE_FAILURE_MESSAGE = "failure" + String message = this.BASE_FAILURE_MESSAGE constructor(key: string) } class UserFailure { constructor(key: string) } note left Extends parent message key by sending `user` keyword as a domain to parent. So in `UserFailure` our `message` property will be `failure.user`. end note UserFailure --|> BaseFailure class UserModificationFailure { constructor(key: string) } note right Extends parent message key by sending `modification` keyword to parent. So in `UserModificationFailure` our `message` property will be `failure.user.modification` end note UserModificationFailure --|> UserFailure class UserModificationAlreadyExistsFailure { constructor() } note left Extends parent message key by sending `alreadyExists` keyword to parent. So in `UserModificationAlreadyExistsFailure` our `message` property will be `failure.user.modification.AlreadyExists` end note class DeviceFailure { constructor() } DeviceFailure --|> BaseFailure UserModificationAlreadyExistsFailure --|> UserModificationFailure @enduml