3
我很確定我不能成爲第一個絆倒這個,但我找不到答案。這是作業。Java超載分辨率 - 爲什麼m(演員,演員)而不是m(匹配,演員表)
class Tier{}
class Fisch extends Tier{}
class Vogel extends Tier{}
class Huhn extends Vogel{}
class Spatz extends Vogel{}
class Karpfen extends Fisch{}
class Super{
public void m(Tier t1, Tier t2){
System.out.println("1");
}
public void m(Tier t, Fisch f){
System.out.println("2");
}
public void m(Fisch f, Tier t){
System.out.println("5");
}
}
class Sub extends Super{
public void m(Tier t1, Fisch t2){
System.out.println("3");
}
public void m(Vogel v, Fisch f){
System.out.println("4");
}
}
public class TierTest{
public static void main(String[] args) {
Tier t1 = new Tier();
Tier t2 = new Vogel();
Fisch f = new Karpfen();
Vogel v1 = new Vogel();
Vogel v2 = new Spatz();
Huhn h = new Huhn();
Karpfen k = new Karpfen();
Super sup1 = new Super();
Super sup2 = new Sub();
sup1.m(h, v2);
sup2.m(v1, k); //4 expected, got 3
sup1.m(t1, t2);
sup1.m(v1, k);
sup1.m(v2, f);
sup2.m(v1, f); //4 expected, got 3
}
}
兩次都是一個Vogel(鳥)(聲明和運行時類型)和某種魚。爲什麼m(Tier,Fisch)選擇m(Vogel,Fisch)?
第一個參數是完美匹配的。其餘這些符合我的直覺。
對不起,如果我太麻木,找不到類似的問題。
有一個愉快的週末, 斯蒂芬
非常感謝! –