是否有一種語言允許超類型A定義了一個方法useFoo(Foo foo),例如B,派生自A定義了一個方法useFoo(Bar bar),(Bar源自Foo),當使用B作爲A時, Foo這是一個Bar,它會運行useFoo的最專業版本?是否有一種語言允許動態綁定參數?
Java示例(不工作,不幸):
public class Foo {
}
public class Bar extends Foo {
}
public class A {
void useFoo (Foo foo) {
System.out.println("A");
}
}
public class B extends A {
void useFoo (Bar bar) {
System.out.println("B");
}
}
public static void main(String[] args) {
A b = new B();
b.useFoo(new Bar()); // actually returns "A", is there one returning "B" ?
}
我知道有一種方法可以做到這一點與「幾」線(例如使用訪問者),但我想知道,如果任何(編譯的)語言都會允許它。
我承認我想知道這是否甚至可能,相反,我不會感到驚訝,什麼阻止它?
這個概念有更好的名字嗎?
編輯:在java中,它被命名爲逆變。謝謝@Kevinrob
在Java中,它是「協方差」和「逆變」,[見更多](http://stackoverflow.com/a/2501513/244702)。 –