@startuml skin rose skinparam BackgroundColor transparent skinparam GenericDisplay old skinparam Shadowing false hide empty members together { class "List" as list_animal { + Animal this[int index] {method} + void Add(Animal) + void RemoveAt(int index) - Animal[] entries } class "List" as list_dog { + Dog this[int index] {method} + void Add(Dog) + void RemoveAt(int index) - Dog[] entries } class "List" as list_cat { + Cat this[int index] {method} + void Add(Cat) + void RemoveAt(int index) - Cat[] entries } } interface "IReadOnlyList" as ro_list_dog { + Dog this[int index] {method} } interface "IReadOnlyList" as ro_list_animal { + Animal this[int index] {method} } interface "IReadOnlyList" as ro_list_cat { + Cat this[int index] {method} } ro_list_dog <|-- list_dog ro_list_animal <|-- list_animal ro_list_cat <|-- list_cat ro_list_animal <|-[#blue]- ro_list_dog ro_list_animal <|-[#blue]- ro_list_cat @enduml