Полный справочник по Java. Java SE 6 Edition. 7-е издание. Герберт Шилдт. "Вильямс", Москва - Санкт-Петербург - Киев, 2007, стр.167.

// 167
// В этой версии Box допускает инициализацию одного объекта другим.
class Box  {
   double width;
   double height;
   double depth;
   // Обратите внимание на этот конструктор. Он использует объект типа Box.
   Box(Box ob)  {  // передача объекта конструктору
      width = ob.width;
      height = ob.height;
      depth = ob.depth;
   }
   // конструктор, используемый при указании всех измерений
   Box(double w, double h, double d)  {
      width = w;
      height = h;
      depth = d;
   }
   // конструктор, используемый, если ни одно из изменений не указано
   Box()  {
      width = -1;     // значение -1 используется для указания
      height = -1;    // не инициализированного
      depth = -1;    // параллелепипеда
   }
   // конструктор, используемый при создании куба
   Box(double len)  {
      width = height = depth = len;
   }
   // вычисление и возврат объема
   double volume()  {
      return width * height * depth;
   }
}
class OverloadCons2  {
   public static void main(String args[])  {
      // создание параллелепипедов с применением различных конструкторов
      Box mybox1 = new Box(10, 20, 15);
      Box mybox2 = new Box();
      Box mycube = new Box(7);
      Box myclone = new Box(mybox1); // создание копии объекта mybox1
      double vol;
      // получение объема первого параллелепипеда
      vol = mybox1.volume();
      System.out.println("Volume mybox1 equal " + vol);
      // получение объема второго параллелепипеда
      vol = mybox2.volume();
      System.out.println("Volume mybox2 equal " + vol);
      // получение объема куба
      vol = mycube.volume();
      System.out.println("Volume mycube equal " + vol);
      // получение объема клона
      vol = myclone.volume();
      System.out.println("Volume myclone equal " + vol);
   }
}