Если java имеет значение pass-by-value, и это значение является адресом памяти для фактического типа, тогда почему перегруженный метод, который называется get, определяется ссылочным/объявленным типом?Почему литье определяет, какой перегруженный метод вызывается?
class Boss {
void test(Object o){
System.out.println("object");
}
void test(Boss b){
System.out.println("boss");
}
public static void main(String[] args) {
Boss b = new Boss();
b.test((Object)b); //prints out object, why?
}
}
Что еще нужно определить, какой метод вызывается? Результатом приведения является ссылка типа 'Object' в отношении JVM. – 11684
Значение, которое передается, что является адресом памяти для объекта Boss. Поэтому я бы ожидал, что фактический тип определит, какой метод вызывается. –
http://stackoverflow.com/questions/2006448/java-method-call-overloading-logic - первый связанный с этим вопрос, Джон тарелочкам ответ ... – zch