Страницы

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

понедельник, 24 февраля 2020 г.

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

#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

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

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