Я уверен, что это невероятно часто встречается с ООП-центром, как и Java.В Java есть способ сделать переменную базового типа, которая принимает все унаследованные подтипы?Например, если у меня есть;
class Mammal {...}
class Dog extends Mammal {...}
class Cat extends Mammal {...}
class ABC {
private Mammal x;
ABC() {
this.x = new Dog();
-or-
this.x = new Cat();
}
}
Мне нужна переменная, чтобы можно было принимать любую расширенную версию, но не в конкретном расширенном виде.
Есть несколько способов, которые я знаю,но не хочу использовать.Я мог бы создать атрибут для каждого подтипа, тогда использовать только один фактически используемый атрибут.Сделайте массив и запихните его туда.
Любые другие идеи или способ получить переменную типа "базовый класс"?
Хорошо, так как я знаю, что использование полиморфной типизации утки isn 'отличная идея в Java, но так как я не думаю, что могу избежать этого.Является ли единственным способом динамического использования методов подкласса для повторного присвоения приведенной версии переменной, т. Е. Я получаю ошибку с этим;
Mammal x;
x = new Dog();
System.out.println(x.getClass());
x.breath();
if (x instanceof Dog) {
x.bark();
} else if (x instanceof Cat) {
x.meow();
}
Символ произнесения не найден, однако это работает;
Mammal x;
x = new Dog();
System.out.println(x.getClass());
x.breath();
if (x instanceof Dog) {
Dog d = (Dog) x;
d.bark();
} else if (x instanceof Cat) {
Cat c = (Cat) x;
c.meow();
}
Это последний единственный способ сделать это?