Следующий код печатает "String"
public class Riddle {
public static void main(String[] args) {
hello(null);
}
public static void hello(Object o) {
System.out.println("Object");
}
public static void hello(String s) {
System.out.println("String");
}
}
Почему этот код компилируется? Не является ли неопределенным двузначный?
Например, следующий код НЕ компилируется из-за неоднозначной подписи.
public class Riddle {
public static void main(String[] args) {
hello(null);
}
public static void hello(Object o) {
System.out.println("Object");
}
public static void hello(Integer o) {
System.out.println("Integer");
}
public static void hello(String s) {
System.out.println("String");
}
}
Может кто-нибудь объяснить, почему первый пример может скомпилироваться без двусмысленных ошибок?