24. januar 2005 - 23:49
Der er
21 kommentarer
Angående referencer
class A { public void print() { System.out.println("Test"); } class B { private A a_ob; public B(A ob) { a_ob = ob; } public void test() { a_ob.print();} class Test { public static void main(String[] args) { A z = new A(); B b = new B(z); } Hvis jeg i klasse B vil have mulighed for at bruge præcis reference z er jeg vel nød til at give den med til konstruktøren i B. Men det kunne være rart hvis kunne undgå dette for hver gang man nu skal lave en ny instans af B er man nød til at give et objekt af typen A med. Er det muligt i klassen B at arbejde med z uden at man behøver at specificere en konstruktor i B??
Annonceindlæg fra Infor
24. januar 2005 - 23:53
#1
Du kan bruge en setter. A z = new A(); B b = new B(); b.setA(z);
24. januar 2005 - 23:54
#2
som Arne siger.. eller hvis du mente noget andet class B { private A a_ob; public B() { a_ob = new A(); }
24. januar 2005 - 23:55
#3
Ok, men hvad er det lige for noget?
24. januar 2005 - 23:58
#4
Men problemet er at det er den reference "z" som jeg laver i Test som jeg vil bruge i B
24. januar 2005 - 23:59
#5
- eller lav 2 konstruktore: publib class B { private A a_instance; public B() { } public B(A obj) { a_instance = obj; } //Og så lige en Set-metode public void setA(A obj) { a_instance = obj; } } Var det ikke en mulighed? Så kan du sende din reference med hvis du lyster, eller lade vær!
25. januar 2005 - 00:00
#6
publib = public sorry
25. januar 2005 - 00:01
#7
tigertool>> Selv om han ikke har lavet denne konstruktør public B() { } så laver java den for ham.
25. januar 2005 - 00:02
#8
Java laver da ikke en default konstructor hvis der allerede er en, vel? Desuden kan det jo være at der skulle ske noget mere i den 'default'
25. januar 2005 - 00:03
#9
Altså.. hvis der allerede er en anden konstructor
25. januar 2005 - 00:03
#10
Jeg kan jo lige teste:) men det mener jeg den gør
25. januar 2005 - 00:04
#11
du kunne også gøre den der printfunktion statisk: class A { public static void print() { System.out.println("Test"); } } så kan du kalde den hvorsomhelst fra, uden at behøve at lave nogen instans af A class B { // private A a_ob; //FJERNET public B() { //parameter fjernet // a_ob = ob; //FJERNET } public void test() { A.print(); // print kaldes nu via klassenavnet } class Test { public static void main(String[] args) { // A z = new A(); //FJERNET B b = new B(); //parameter fjernet } } mvh JakobA
25. januar 2005 - 00:04
#12
Jeg forstår stadig ikke hvordan mit z fra main metoden i klassen Test havner i B!
25. januar 2005 - 00:08
#13
kalp << Min JBuilder X laver i al fald ikke en default konstructor hvis der allerede findes en konstructor i class'en. Jeg har lige testet det :P
25. januar 2005 - 00:09
#14
tigertool>> kan ikke lige finde min bøger frem i rodet(flytterrod) hehe.. men tænker dybere over mener jeg faktisk du har ret... at java opretter en tom konstruktør hvis ikke man selv laver en.. C# gør ikke
25. januar 2005 - 00:10
#15
I min mulighed kan du enten smide z med i oprettelsen af B, eller tilknytte z til B ved at bruge setA(A obj)
25. januar 2005 - 00:10
#16
Ok hvis jeg har : class A { private int count; public A() { count = 5; public static int count() { return count;} class B { count(); } Så får jeg en fejl om at jeg ikke kan lave en statisk reference til et ikke statisk field. Dette kunne ellers have løst problemet.
25. januar 2005 - 00:12
#17
Så kan du jo bare lave attributten statisk også.
25. januar 2005 - 00:14
#18
der mangler også lige en } i konstruktor A() desuden skal du vel angive hvilken class du vil kalde metoden count() på, jeg _mener_ at kompileren ellers tror at count() ligger på this (klassen selv)
25. januar 2005 - 00:19
#19
Jamen så er der jo ikke meget ide i at gøre den statisk da det netop var for at undgå at man skulle bruge en instans af A for at anvende metoden.
25. januar 2005 - 03:27
#20
C# opretter også en tom constructor hvis man ikke selv opretter nogen.
19. februar 2005 - 18:01
#21
Husk lige at lukke :)
Kurser inden for grundlæggende programmering