На самом деле, это был идеальный пример, поскольку есть два различных стандартных класса Java Date: java.util.Date и java. sql .Date .
Откуда он знает, какой использовать? Просто. Метод getDate () объявлен как часть определения класса Thing, а частью этого объявления является его возвращаемый тип:
public java.util.Date getDate() {
return this.date;
}
Конечно, если у вас есть импорт в определении класса Thing - и это не двусмысленно, вы просто говорите:
public Date getDate() {
Если бы вы декодировали двоичный файл класса Thing, вы бы увидели сигнатуру метода метода getDate, и она включает полное имя класса (включая пакет) возвращаемого типа.
import - это просто способ сообщить компилятору, какой пакет (ы) вы хотите использовать при обращении к классам без явных квалификаций. Список импорта будет проверяться всякий раз, когда будет замечено неквалифицированное имя класса, и пакеты будут искать. Если нет никакой двусмысленности (такой как импорт java.util.date и java.sql.Date), этот класс будет использоваться. Если вы можете определить класс неявным образом или если имя класса полностью определено, вам не нужно импортировать.