Одна из задач натолкнула на мысль, а что если в классе объявить поля, но инициализировать их не конструктором, а методом? Будет ли принципиальная разница? public class Solution { public static void main(String[] args) throws Exception { Cat cat = new Cat().initializeIdAndName(1, "Барсик"); System.out.println(cat); } static class Cat{ long id; String name; public Cat initializeIdAndName(long id, String name) { this.id = id; this.name = name; return this; } @Override public String toString() { return String.format("The Cat's name is %s, id = %d", name, id); } } }