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