Из простого любопытства можно ли присвоить переменную двум типам?Можно ли присвоить переменную двум типам?
Поскольку у меня нет технических терминов прямо в этом вопросе, позвольте мне немного уточнить. Как правило, вы бы иметь статический и динамический тип:
Animal a = new Dog();
Если динамический тип должен наследовать статический тип:
public class Dog extends Animal {...}
Но можно гарантировать, что динамический тип расширяет/реализует несколько типов ?
Для того, чтобы Dog
должен расширить класс Animal
и реализовать интерфейс?
Я бы себе представить, что-то вроде:
Animal [implements Happy] a = new Dog();
Я совершенно уверен, что это просто сумасшедший разговор, но возможно ли это? А если нет, какая ближайшая альтернатива?
Я думаю, что это было бы актуально только в случаях, когда переменная имеет интерфейс, который вы создали, и класс, который вы не можете редактировать.
Один из способов я могу думать о том, что во время выполнения определения литьем его каждый раз, когда вы используете его:
try {
@SuppressWarnings("unused")
Animal a = (Happy) new Dog();
} catch (ClassCastException e) {
//Is not of type Happy
}
//Using a method from the Happy-interface
try {
((Happy)a).smile();
} catch (ClassCastException e) {
//Is not of type Happy
}
На самом деле вам не нужно полагаться на литье, возможно, было бы проще и чище использовать 'instanceof Happy' после определения a. –