Добрый день. Поправьте если ошибаюсь..... В виде public void Circle() { color = new Color(); Это у нас не конструктор, а метод класса. Ведь у конструктора нет возвращаемого типа и он не может быть void. Поэтому JVM для инициализации объекта создает свой конструктор по умолчанию при вызове circle.color.setDescription. А так как он будет пустым, т.е. мы ничего не присваиваем и не инициализируем, то из-за этого мы ловим nullpointerexeption. А вот при варианте public Circle(){ color = new Color (); мы создаем свой конструтор по умолчанию и инициализируем в нем объект класса color..... P.S. если не совсем правильно использую термины, сильно не ругать :-))