Страницы

Поиск по вопросам

понедельник, 6 мая 2019 г.

Использование интерфейсов

Есть классы: Животное, Кот и Собака с интерфейсом дрессируемый.
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(); } }
Как это правильно сделать?


Ответ

Почти правильно, только { animal.jump(); } компилятор не пропустит, потому что animal имеет тип Animal, у которого нет метода jump(). В Java наличие полей и методов проверяется по типу ссылки, а не объекта, на который она указывает. Поэтому нужно выполнить приведение ссылки к типу Training одним из двух нижеследующих способов:
((Training)animal).jump();
Training trainingAnimal = (Training)animal; trainingAnimal.jump();

Комментариев нет:

Отправить комментарий