Подскажите причину, почему так происходит (вопрос внизу).
Не буду добавлять код решения задачи, напишу только то, что относится к делу:
public class Solution {
public static void main(String[] args) throws Exception {
System.out.println(Matrix.NEO);
System.out.println(Matrix.TRINITY);
}
static class Matrix {
public static DBObject NEO = new User().initializeIdAndName(1, "Neo");
public static DBObject TRINITY = new User().initializeIdAndName(2, "Trinity");
}
interface DBObject {
DBObject initializeIdAndName(long id, String name);
}
static class User implements DBObject {
//Пропущено
@Override
public String toString() {
return String.format("The user's name is %s, id = %d", name, id);
}
}
}
Не понимаю, как мы можем получать вывод в консоль с переопределенного метода toString (The user's name is .. ), если он относится к классу User, а мы получаем объекта типа DBObject, в распоряжении которого есть только метод initializeIdAndName.
Да, сам объект при создании имеет тип User, но ведь тут происходит расширение типа, которое, как мне казалось, должно было усечь доступные методы