混淆了Java中的单个分派与多个分派吗

混淆了Java中的单个分派与多个分派吗,java,dispatch,multiple-dispatch,single-dispatch,Java,Dispatch,Multiple Dispatch,Single Dispatch,我读过 只是对于多个分派(不是Java)和单个分派(Java)的概念仍然有点困惑 让我们用这个例子: class A { m(A a) { System.out.println(“In A: “ + a.getClass()); } } class B extends A { m(A a) { System.out.println(“In B.m(A): “ + a.getClass()); } m(B a) {

我读过

只是对于多个分派(不是Java)和单个分派(Java)的概念仍然有点困惑

让我们用这个例子:

class A { 
    m(A a) {
       System.out.println(“In A: “ + a.getClass());
    }
}
class B extends A {
    m(A a) {
       System.out.println(“In B.m(A): “ + a.getClass());
    }
    m(B a) {
       System.out.println(“In B.m(B): “ + a.getClass());
    }
}

A a = new A();
A b = new B();
B c = new B();

a.m(a);   // Java will call A.m(A); double-dispatch would call A.m(A)
b.m(b);   // Java will call B.m(A); double-dispatch would call B.m(B)
b.m(c);   // Java will call B.m(B); double-dispatch would call B.m(B)
•多个调度查看以下内容是否正确:

  • 调用该方法的对象的动态类型(与Java single dispatch相同)
  • 传递给方法的参数的动态类型(因此,显然与Java的单一分派不同)
  • •因此,单次分派和多次分派之间的区别在上文中为#2,其中单次分派使用静态类型的参数,而不是动态类型的参数


    感谢您提供的任何见解

    从我阅读的您链接的帖子和它链接的维基百科文章中,答案是#2。这是您在使用它之前不会真正注意到其有用性的东西之一。如果您所看到的只是单个分派,那么很难想象有多个分派。如果您真的对绘制比较感兴趣,可以尝试使用CommonLisp或使用multidispatch的方法。