При взгляде на другой случай:
пакет com.snamellit;
public class Main {
public void method(Object o) {
System.out.println("Object Version");
}
public void method(String s) {
System.out.println("String Version");
}
public static void main(String args[]) {
Main question = new Main();
question.method("word");
}
}
Если первый метод tqkes представляет собой StringBuffer, а второй - String, путаница невозможна, так как слово представляет собой String, а не StringBuffer.
В Java идентичность функции / метода зависит от 3-х вещей: имени, типа параметров (он же сигнатура аргумента) и загрузчика классов. Поскольку оба типа имеют различную сигнатуру аргумента, компилятор может легко выбрать правильный и не вызывает ошибку.