Многие объектно-ориентированные языки допускают расширения классов, таким образом:Есть ли язык программирования с расширяемыми перечислениями?
class Animal {}
class Cat extends Animal {}
class Dog extends Animal {}
Однако при использовании перечислений бывают случаи, когда противоположная функциональность желательно. Например:
enum CatAction {
meow, eat, sleep
}
enum DogAction {
bark, fetch, eat, sleep
}
enum AnimalAction {
eat, sleep
}
Существует некоторая избыточность здесь. должен быть CatAction
, потому что если произвольное Animal
может выполнить действие, то Cat
может выполнить его по определению. Однако даже языки с множественным наследованием не позволяют определять enum AnimalAction extends CatAction, DogAction {}
, и, кроме того, этот синтаксис не позволяет избежать избыточности.
Это может быть исправлено с помощью generalizes
или аналогичного ключевого слова.
enum AnimalAction {
eat, sleep
}
enum CatAction generalizes AnimalAction {
meow
}
enum DogAction generalizes AnimalAction {
bark, fetch
}
Эта функция также делает некоторые модели более удобны:
enum Direction2D {
North, East, South, West
}
enum Direction3D generalizes Direction2D {
Up, Down
}
ли какие-либо языки программирования поддерживают эту функцию?