Добрый день. Поправьте если ошибаюсь.....
В виде
public void Circle() {
color = new Color();
Это у нас не конструктор, а метод класса. Ведь у конструктора нет возвращаемого типа и он не может быть void. Поэтому JVM для инициализации объекта создает свой конструктор по умолчанию при вызове circle.color.setDescription. А так как он будет пустым, т.е. мы ничего не присваиваем и не инициализируем, то из-за этого мы ловим nullpointerexeption.
А вот при варианте
public Circle(){
color = new Color ();
мы создаем свой конструтор по умолчанию и инициализируем в нем объект класса color.....
P.S. если не совсем правильно использую термины, сильно не ругать :-))
package com.javarush.task.task05.task0523;
/*
Конструктор
*/
public class Circle {
public Color color;
public static void main(String[] args) {
Circle circle = new Circle();
circle.color.setDescription("Red");
System.out.println(circle.color.getDescription());
}
public Circle() {
color = new Color();
}
public class Color {
String description;
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
}
}