Сегодня одна из них меня очень смутила своим вопросом. , поэтому я попросил ее дать мне день на размышление над проблемой, и я дам ей настолько точный ответ, насколько смогу.
Она рассказала мне что учительница очень разозлилась, когда она использовала ключевое слово экземпляр в своей экзамен.
Кроме того, она сказала, что учительница сказала, что невозможно доказать, как работает полиморфизм, если она использовала это слово.
Я много думал, пытаясь найти способ доказать, что в некоторых случаях нам нужно использовать instanceof, а также что даже если мы его используем, в этом подходе все равно есть некоторый полиморфизм.
Итак, это пример, который я сделано:
Код: Выделить всё
public interface Animal
{
public void talk();
}
class Dog implements Animal {
public void talk() {
System.out.println("Woof!");
}
}
public class Cat implements Animal
{
public void talk() {
System.out.println("Meow!");
}
public void climbToATree() {
System.out.println("Hop, the cat just cimbed to the tree");
}
}
class Hippopotamus implements Animal {
public void talk() {
System.out.println("Roar!");
}
}
public class Main {
public static void main(String[] args) {
//APPROACH 1
makeItTalk(new Cat());
makeItTalk(new Dog());
makeItTalk(new Hippopotamus());
//APPROACH 2
makeItClimbToATree(new Cat());
makeItClimbToATree(new Hippopotamus());
}
public static void makeItTalk(Animal animal) {
animal.talk();
}
public static void makeItClimbToATree(Animal animal) {
if(animal instanceof Cat) {
((Cat)animal).climbToATree();
}
else {
System.err.println("That animal cannot climb to a tree");
}
}
}
- Первый подход ( ПОДХОД 1) — это простая демонстрация того, как программировать интерфейс, а не реализация. Думаю, что полиморфизм хорошо виден, в параметрах метода [/b], а также в способе вызова метода talk с использованием объекта животного. (Это нормально)
Код: Выделить всё
makeItTalk(Animal animal) - Вторая часть меня смущает. В какой-то момент своего экзамена она использовала instanceof (я не знаю, как выглядел их экзамен), и это не было принято правильно, потому что учитель сказал: вы не доказываете полиморфизм.
Как видите, лазить по деревьям могут только кошки, а заставлять Бегемота или Собаку лезть на дерево было бы нелогично. Я думаю, это может быть примером использования
Код: Выделить всё
instanceof- А как насчет полиморфизма в подходе 2?
- Сколько случаев применения полиморфизма вы там видите (только подход 2)?
- Как вы думаете, эта строка имеет какой-то тип полиморфизма в нем?
Код: Выделить всё
((Cat)animal).climbToATree();
- Как вы думаете, это правильно?
- Если да, то как бы вы объяснили своими словами, что кастинг основан на полиморфизме?
Подробнее здесь: https://stackoverflow.com/questions/623 ... sm-related
Мобильная версия