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);
}
}