【问题标题】:Whats the real time example of dynamic polymorphism in javajava中动态多态的实时例子是什么
【发布时间】:2019-01-24 12:28:21
【问题描述】:

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();

}

通过查看上面的代码,我可以说它的对象将被调用,那么为什么它的运行时多态性

任何人都可以请帮助运行时/动态多态的实时正确示例??

【问题讨论】:

  • 当然:上面的代码甚至不能编译,因为你不能让这些方法调用仅仅放在那个类的主体中。避免这样做:在放置“真实代码”时,确保它编译。其他任何内容都会很快误导您的读者,从而导致负面反馈。
  • 感谢编辑..下次在病房里我会记住代码格式化和编译代码

标签: java dynamic polymorphism


【解决方案1】:

让我们稍微更改一下您的代码示例。我们没有定义要测试的对象的测试类,而是提供了一个带有一些参数的方法:

public void testCalls(A a1, A b1, A b2) {
  a1.m1();
...

现在,你还能说会发生什么吗? “嗯,这将取决于传递给方法调用的内容?!”

在您的示例中,您知道会发生什么,因为您可以轻松推断出所有对象的真实性质。但是,如果您没有这些信息怎么办?当你只提供一个接口,而传入的对象没有出现在你的源代码中?!

因此:重要的是运行时对象的 true 类型。当然,当你构造一个简单的例子时,你总是知道那个真正的类型。但现实世界中重要的事情并没有那么简单。

【讨论】:

  • 能否请您提供一个完整的示例以便更好地理解.. 我知道这个小复杂示例会有所帮助,但我正在寻找相同的示例。一个更好的例子,可以给我很多理解..
  • 我不能保证我能在星期一之前做到这一点。如果您在星期二左右没有收到我的消息,请给我留言!
  • 嗨 Ghostcat,正如我们所讨论的,我正在等待回复
【解决方案2】:

"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

【讨论】:

    【解决方案3】:

    顾名思义,它发生在实时,也就是运行时。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-14
      • 2011-06-04
      • 1970-01-01
      • 2011-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多