Каков пример динамического полиморфизма в Java в реальном времени?
Мне столько раз задавали этот вопрос в интервью но не получил реального ответа. Код:
class A {
public void m1() {}
}
class B extends A {
public void m1() {}
}
class manage {
A a1 = new A();
B b1 = new B();
A a2 = new B();
//when i will call A's m1 it will call m1 of A
a1.m1();
//when i will call B's m1 it will call m1 of B
b1.m1();
//when i will call B's m1
a2.m1();
}
в приведенном выше коде, посмотрев, я могу сказать, чей объект будет вызываться, тогда почему его полиморфизм времени выполнения
Кто-нибудь может помочь в правильном примере реального времени времени выполнения / динамического полиморфизма ??
Спасибо за редактирование .. Буду иметь в виду форматирование кода и компиляцию кода в следующий раз на подопечных




"Dynamic polymorphism is the polymorphism existed at run-time".
Это означает, что компилятор Java не понимает, какой метод вызывается во время компиляции. Только JVM решает, какой метод вызывается во время выполнения.
В вашем примере компилятор не знает поведения a2.m1(). Однако во время выполнения JVM вызовет код, определенный в классе B.
class A {
public void m1(){
System.out.println("Inside A's m1 method");
}
}
class B extends A {
// overriding m1()
public void m1(){
System.out.println("Inside B's m1 method");
}
}
class C extends A {
public void m1(){
System.out.println("Inside C's m1 method");
}
}
// Driver class
class Dispatch {
public static void main(String args[]) {
// object of type A
A a = new A();
a.m1(); // calling m1 of A
a = new B();
a.m1(); // calling m1 of B
a = new C();
a.m1(); // calling m1 of C
}
}
Результаты:
Inside A's m1 method
Inside B's m1 method
Inside C's m1 method
Давайте немного изменим ваш пример кода. Вместо тестового класса, который определяет объекты для тестирования, мы предлагаем только метод, принимающий некоторые аргументы:
public void testCalls(A a1, A b1, A b2) {
a1.m1();
...
Вы все еще можете сказать, что произойдет? «Хм, это будет зависеть от того, что будет передано в вызов метода ?!»
В вашем примере вы знаете, что произойдет, потому что вы можете легко определить природу истинный всех объектов. Но что, если у вас нет этой информации? Когда вы предоставляете только интерфейс, а входящие объекты не отображаются в исходном коде ?!
Таким образом: важен тип объекта истинный во время выполнения. Конечно, когда вы строить простой пример, вы всегда знаете этот истинный тип. Но вещи, которые имеют значение в реальном мире, попросту не так просты.
Не могли бы вы разместить полный пример для лучшего понимания .. Я понял, что этот небольшой сложный пример поможет, но я ищу то же самое. лучший пример, который может дать мне много понимания ..
Я не могу обещать, что смогу сделать это до понедельника. Пожалуйста, напишите мне, если вы не получите известие от меня примерно до вторника!
Привет Ghostcat, как мы обсуждали, жду ответа
Как следует из названия, это происходит в реальном времени или во время выполнения.
И, конечно же: приведенный выше код даже не будет компилироваться, поскольку вы не можете иметь эти вызовы методов просто в теле этого класса. Избегайте этого: при размещении «настоящего кода» убедитесь, что это компилирует. Все остальное быстро введет ваших читателей в заблуждение, что приведет к негативным отзывам.