klon obiektu-konstruktor

0

pytanie laika, który zaczyna przygodę z programowanie obiektowym.

Prosty kod z książki Schildt'a, poniżej.
Nie rozumiem, w jaki sposób kompilator kojarzy w konstruktorze przekazanie obiektu "Box ob",
bo przecież nigdzie poniżej nie ma obiektu "ob". Za to jest obiekt Box myclone = new Box(mybox1), który jest klonem mybox1.
Zamieniłem w konstruktorze (Box ob) na (Box myclone) i oczywiście działo to prawidłowo, ale nadal nie kumam, jak działa to w przypadku użycia (Box ob). Może ktoś bystry spróbuje mi to wyjaśnić?

<code>
// Jeden obiekt Box może posłużyć do inicjalizacji innego obiektu Box.

class Box {
  double width;
  double height;
  double depth;

  // tworzenie klonu obiektu
   Box(Box ob) { // przekazanie obiektu do konstruktora
    width = ob.width;
    height = ob.height;
    depth = ob.depth;
  }

  // konstruktor używany, gdy podano wszystkie wymiary
  Box(double w, double h, double d) {
    width = w;
    height = h;
    depth = d;
  }

  // konstruktor używany przy braku wymiarów
  Box() {
    width = -1;  // warto¶ć -1
    height = -1; // wskazuje
    depth = -1;  // niezainicjalizowane pudełko
  }

  // konstruktor używany do tworzenia sze¶cianów
  Box(double len) {
    width = height = depth = len;
  }

  // oblicz i zwróć objęto¶ć
  double volume() {
    return width * height * depth;
  }
}

class OverloadCons2 {
  public static void main(String args[]) {
    // tworzenie pudełek za pomoc± różnych konstruktorów.
    Box mybox1 = new Box(10, 20, 15);
    Box mybox2 = new Box();
    Box mycube = new Box(7);

    Box myclone = new Box(mybox1);

    double vol;

    // pobranie objęto¶ci pierwszego pudełka
    vol = mybox1.volume();
    System.out.println("Objęto¶ć mybox1 wynosi " + vol);

    // pobranie objęto¶ci pierwszego pudełka
    vol = mybox2.volume();
    System.out.println("Objęto¶ć mybox2 wynosi " + vol);

    // pobranie objęto¶ci sze¶cianu
    vol = mycube.volume();
    System.out.println("Objęto¶ć mycube wynosi " + vol);

    // pobranie objęto¶ci klonu
    vol = myclone.volume();
    System.out.println("Objęto¶ć clone wynosi " + vol);
  }
}


 
2

ob to tylko nazwa argument konstruktora i może być dowolna (tak samo jak nazwy argumentów metod). Jak jak gdy dziecko się urodzi, to możesz nazwać go Jasiem czy Piotrusiem, a nadal będzie to samo dziecko.

Box(Box ob)

oznacza konstruktor Box przyjmuje jeden argument typu Box, i wewnątrz tego konstruktora ten argument będzie się nazywał ob.

0

dzięki, chyba dotarło do mnie, muszę się przestawić na inny poziom abstrakcji ;-)
Dodałem kilka innych klonów różnych obiektów i jeden konstruktor z Box(Box ob) za każdym razem
tworzy ich klony, co potwierdzają prawidłowo działające metody vol na tych klonach....

1 użytkowników online, w tym zalogowanych: 0, gości: 1