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 DE-CIX
Edge computing: behandling ved kilden
Edge computing revolutionerer den måde, data behandles på, ved at bringe kapacitet og ydeevne tættere på dér, hvor der er behov for det.
15. april 2025
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