Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中动态多态性的实时示例是什么_Java_Dynamic_Polymorphism - Fatal编程技术网

java中动态多态性的实时示例是什么

java中动态多态性的实时示例是什么,java,dynamic,polymorphism,Java,Dynamic,Polymorphism,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

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编译器不知道在编译时调用哪个方法。只有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

    }
}
结果:

A的m1方法内部
内B的m1方法
C的m1方法

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

public void testCalls(A a1, A b1, A b2) {
  a1.m1();
...
现在,你还能说会发生什么吗?“嗯,这取决于传递给方法调用的是什么?!”

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


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

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

当然,上面的代码甚至不会编译,因为这些方法调用不能仅仅放在类的主体中。避免这样做:当发布“真正的代码”时,确保它是编译的。其他任何东西都会很快误导读者,导致负面反馈。感谢您的编辑。。下次在wardsCan上,我会记住代码格式和代码编译。请放一个完整的示例,以便更好地理解。。我知道这个复杂的小例子会有帮助,但我也在寻找同样的例子。一个更好的例子可以给我很多理解1.我不能保证我能在星期一之前做到。如果周二左右你还没有收到我的消息,请给我留言!嗨,幽灵猫,正如我们讨论的,我正在等待回应