Не совсем разобрался с данным кодом:
interface DBObject {
        DBObject initializeIdAndName(long id, String name);
    }

    static class User implements DBObject {
        long id;
        String name;

        public User (вместо User можно записть "DBObject") initializeIdAndName(long id, String name) {
            this.id = id;
            this.name = name;
            return this;
        }
}
Метод initializeIdAndName объявлен в интерфесе DBObject и возращает свой же тип DBObject. Потом мы в классе User наследуемся от этого интерфейса и должны написать его реализацию. Чем отличается реализация интерфейса с типом User и типом DBObject? Программа компилируется в любом из этих случаев и выдает один и тот же рузультат.