수퍼 유형을 허용하는 언어가 있습니까? B를 A와 같이 사용할 때 useFoo (Bar bar), (bar는 Foo에서 파생 됨) 메소드를 정의하는 A에서 파생 된 B와 같은 useFoo (Foo foo) 바 Foo는 useFoo의 가장 특화된 버전을 실행할 것인가?인수에 동적 바인딩을 허용하는 언어가 있습니까?
자바 예 (불행히도 작동하지) :
내가 아는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" ?
}
이가 (예를 들어 방문자가 사용) "약간"선으로 일어날 수 있도록하는 방법이 있지만 내가 알고 싶습니다 모든 (컴파일 된) 언어가 허용합니다.
나는 이것이 가능한지 알고 싶습니다. 반대로 저를 놀라게하지 않을 것이며, 그것을 막을 수 있습니까?
더 좋은 개념이 있나요?
편집 : 자바에서는 Contravariance로 명명됩니다. 당신이
Java에서는 "공분산"및 "Contravariance", [더보기] (http://stackoverflow.com/a/2501513/244702)입니다. –