#java
Есть классы: Животное, Кот и Собака с интерфейсом дрессируемый. public class Animal public class Cat extends Animal public class Dog extends Animal implements Training public interface Training { void jump(); } Нужно написать функцию, которая получает животное, проверяет дрессируемое ли оно и если да, то выполняет команду. Что-то вроде: public void Test(Animal animal) { if(animal instanceof Training) { animal.jump(); } } Как это правильно сделать?
Ответы
Ответ 1
Почти правильно, только { animal.jump(); } компилятор не пропустит, потому что animal имеет тип Animal, у которого нет метода jump(). В Java наличие полей и методов проверяется по типу ссылки, а не объекта, на который она указывает. Поэтому нужно выполнить приведение ссылки к типу Training одним из двух нижеследующих способов: ((Training)animal).jump(); Training trainingAnimal = (Training)animal; trainingAnimal.jump();Ответ 2
Так у вас уже почти нормально написано, надо только animal.jump() заменить на ((Training) animal).jump(). Т.к. в Animal нет jump, то мы его кастуем к Training
Комментариев нет:
Отправить комментарий