TwojePC.pl © 2001 - 2024
|
|
A R C H I W A L N A W I A D O M O Ś Ć |
|
|
|
konstruktory w JAVA , Ometoch 3/06/03 11:16 Witam. Mam problem. Tworzę swoją klasę np. MyClass1, w jej ciele umieszczam konstruktora z parametrami np.
public void MyClass1(int a, int b) { ... }
W programie deklaruje zmienną :
MyClass1 myCl1;
a w init() konstruuje obiekt:
myCl1=new MyClass1(3,6);
po kompilacji wyskakuje błąd, że konstruktor ma za dużo parametrów; natomiast jak zmienie na:
myCl1= new MyClass1();
to jest ok. O co chodzi??
Wiem że w C++ w ciele umieszczało się konstruktory i destruktory. W Javie nie ma destruktorów ale chyba składnia klasy pozostała podobna.Najgorzej jest wiedzieć, że coś nie
chodzi jak powinno i nie wiedzieć
jak to naprawić ! - glowy nie dam, ale w C++ konstruktor (i destruktor) nie moga zwracac wartosci , bwana 3/06/03 11:32
Jesli w Javie jest tak samo, to byc moze kompilator uznal, ze
public void MyClass1(int a, int b) { ... }
jest definicja metody, a nie konstruktora (bo jest zwracana wartosc). W ten sposob kompilator wie (mysli:-D), ze jest domyslny, automatyczny konstruktor public MyClass1()oraz _metoda_ public void MyClass1(int a, int b) { ... }.
Tak strzelam, ale moze to to (Java jest przeciez b. podobna do C++)"you don't need your smile when I cut
your throat" - odp: konstruktory w JAVA , Stone 3/06/03 11:39
pisząc public void MyClass1(int a, int b) nie tworzysz konstruktora tylko metodę, napisz public MyClass1(int a, int b){}
i powinno być dobrze. Gdy piszesz myCl1= new MyClass1(); tworzony jest obiekt klasy MyClass1 na podstawie konstruktora domyślnego MyClass1(). Jeżeli zdefiniujesz konstruktor MyClass1(int a, int b), i będziesz chciał używaż konstruktora domyślnego MyClass1() to będziesz musiał go skonfigurować tzn MyClass1(){ /* ciało konstruktora */; }Pozdrawiam
Stone aka S1one - jeszcze jedno kończąc wątek.. , Ometoch 3/06/03 11:56
nie wiem czy dobrze wnioskuje ale skoro wywołanie: costam=new CosTam() tworzy obiekt na podstawie domyślnego konstruktora to czy sama deklaracja:
CosTam costam; nie czyni tego samego? (tzn. wywołuje domyślny konstruktor?)Najgorzej jest wiedzieć, że coś nie
chodzi jak powinno i nie wiedzieć
jak to naprawić ! - konstruktor wywolywany jest _automatycznie_ wylacznie przy korzystaniu z operatora new , bwana 3/06/03 12:01
jesli masz przeladowany konstruktor, to zostanie wywolany ten, do ktorego pasuje zestaw podanych argumentow."you don't need your smile when I cut
your throat" - odp: jeszcze jedno kończąc wątek.. , Stone 3/06/03 12:13
z reguły pisze się tak CosTam costam = new CosTam(); czyli: TypObiektu nazwaNowoTworzonego obiektu = operator new KonstruktorObiektu();
Czyli w odpowiedzi na twoje pytanie: deklaracja CosTam costam nie tworzy obiektu, potrzebna jest jeszcze deklaracja new CosTam(), bądz inny konstruktor;Pozdrawiam
Stone aka S1one - a dla pelnego dookreslenia - nie deklaracja "new costam()" a definicja , bwana 3/06/03 12:15
bo z "new" to juz definicja:)"you don't need your smile when I cut
your throat" - tak w pełni się zgadzam , Stone 3/06/03 12:17
mój błąd :)Pozdrawiam
Stone aka S1one
- nie napisales niczego ponad to co juz bylo napisane:-D , bwana 3/06/03 11:59
..."you don't need your smile when I cut
your throat" - poprostu byłaś szybsza :P , Stone 3/06/03 12:07
...Pozdrawiam
Stone aka S1one
- dzięki wielkie! , Ometoch 3/06/03 11:46
Teraz już czaje o co chodzi. Sugerowałem się tym że w ciele klasy nie może być metody o takiej samej nazwie jak klasa i że tylko konstruktory mają taką samą nazwę.
Pozdrowienia.Najgorzej jest wiedzieć, że coś nie
chodzi jak powinno i nie wiedzieć
jak to naprawić ! |
|
|
|
|
All rights reserved ® Copyright and Design 2001-2024, TwojePC.PL |
|
|
|
|