2016-06-15 1 views
1

Я недавно читал о динамическом полиморфизме в java (Я начинаю). В соответствии с моим пониманием , если ссылка на тип родительского класса назначается как ссылка на его дочернее устройство, как показано нижеКак динамический полиморфизм в java применяется к интерфейсам?

tutorialspoint связано с динамическим полиморфизмом. В примере, обсуждаемом в ссылке, я понимаю, что класс Object of employee используется для доступа к (переопределенному) методу класса зарплаты. В этом примере ни абстракция сотрудника, ни интерфейс. (, что означает, что можно создать объект для родителя).

Теперь, согласно этой ссылке stackoverflow, я вижу, что интерфейс используется для обсуждения динамического полиморфизма.

Вопрос: Как можно использовать интерфейс в качестве примера для динамического полиморфизма?

Кроме того, в примере, описанном в tutorialspoint, сказано, что компилятор ищет метод в родительском классе, но JVM вызывает метод дочернего класса во время выполнения.

Интерфейсы не имеют определения метода и не могут быть созданы, поэтому как можно использовать
List<Animal> animalPen = new LinkedList<>(); для динамического полиморфизма.

ответ

0

Собственно, объяснение на самом деле не сильно отличается.

List animalPen = new LinkedList<>(); 
boolean empty = animalPen.isEmpty(); 

В этом примере, компилятор проверяет, имеет ли animalPen метод isEmpty, посмотрев на его ссылочного типа List. List объявляет метод isEmpty, и поэтому, даже если он не определяет его, система затем гарантирует, что animalPen имеет определенный метод этой подписи.

Это связано с тем, что не абстрактный класс должен определять все методы из всех реализуемых им интерфейсов. Это гарантирует, что все экземпляры интерфейса - это тот, который имеет где-то в своей иерархии методы интерфейса.

0

Вы используете интерфейсы для полиморфизма, когда у вас разные типы поведения в ваших объектах. Допустим, у вас есть класс Duck, и вы указали переменную FlyBehavior. В этом случае первое, что вы думаете, это класс с именем FlyBehavior для создания объекта такого типа. Теперь предположим, что у вас разные типы уток, такие как утка Маллард, утка Рыжий, и теперь у вас есть резиновая утка, и все они расширяют класс Утки. Ваша резиновая утка не будет летать, поэтому FlyBehavior будет отличаться от резиновой утки. Таким образом, вы создаете интерфейс FlyBehavior и создаете два новых класса: ItFlies и NoFly, оба реализуют интерфейс FlyBehavior. Конструктор в Duck будет иметь параметр FlyBehavior, который вам нужно будет заполнить, когда вы создадите новый объект типа Duck, как вы говорите, интерфейс не может быть создан, но поскольку ItFlies и NoFly, оба реализуют интерфейс FlyBehavior, вы можете заполнить параметр FlyBehavior этими двумя классами (или любым классом, который реализует FlyBehavior). Этот объектно-ориентированный метод также полезен, чтобы сделать вашу программу более независимой и гибкой в ​​случае внесения изменений.

Смежные вопросы