【发布时间】:2018-01-11 18:02:41
【问题描述】:
我正在尝试在 JAVA 中创建双重调度以使用重载方法。
public abstract class ComposantOrdi {
protected void equiv(ComposantOrdi c){
Equivalence.equiv(this, c);
}
}
public class Montage extends ComposantOrdi{
protected void equiv(Montage montage){
Equivalence.equiv(this, montage);
}
}
public class Equivalence {
public static void equiv(Montage m, ComposantOrdi c){
System.out.println("Montage - ComposantOrdi");
}
public static void equiv(Montage m, Montage c){
System.out.println("Montage - Montage");
}
public static void equiv(ComposantOrdi m, ComposantOrdi c){
System.out.println("ComposantOrdi - ComposantOrdi");
}
}
例如我创建了两个对象
Montage m2 = new Montage();
ComposantOrdi m3 = new Montage();
m3.equiv(m2);
m3.equiv(m3);
m3.equiv((Montage)m3);
结果是:
ComposantOrdi - ComposantOrdi
ComposantOrdi - ComposantOrdi
ComposantOrdi - ComposantOrdi
但我想使用蒙太奇类的重载方法 并得到这样的东西:
Montage - Montage
Montage - Montage
Montage - Montage
我可能不明白双重调度,但请你告诉我我做错了什么吗?
【问题讨论】:
-
由于
m3是ComposantOrdi类型,它只能调用protected void equiv(ComposantOrdi c)方法。将其定义为Montage,您将获得不同的输出。
标签: java design-patterns double dispatch concept