Avatar billede muingaza Nybegynder
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??
Avatar billede arne_v Ekspert
24. januar 2005 - 23:53 #1
Du kan bruge en setter.

A z = new A();
B b = new B();
b.setA(z);
Avatar billede kalp Novice
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();
}
Avatar billede muingaza Nybegynder
24. januar 2005 - 23:55 #3
Ok, men hvad er det lige for noget?
Avatar billede muingaza Nybegynder
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
Avatar billede tigertool Nybegynder
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!
Avatar billede tigertool Nybegynder
25. januar 2005 - 00:00 #6
publib = public

sorry
Avatar billede kalp Novice
25. januar 2005 - 00:01 #7
tigertool>>

Selv om han ikke har lavet denne konstruktør

public B()
    {
    }

så laver java den for ham.
Avatar billede tigertool Nybegynder
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'
Avatar billede tigertool Nybegynder
25. januar 2005 - 00:03 #9
Altså.. hvis der allerede er en anden konstructor
Avatar billede kalp Novice
25. januar 2005 - 00:03 #10
Jeg kan jo lige teste:) men det mener jeg den gør
Avatar billede jakoba Nybegynder
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
Avatar billede muingaza Nybegynder
25. januar 2005 - 00:04 #12
Jeg forstår stadig ikke hvordan mit z fra main metoden i klassen Test havner i B!
Avatar billede tigertool Nybegynder
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
Avatar billede kalp Novice
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
Avatar billede tigertool Nybegynder
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)
Avatar billede muingaza Nybegynder
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.
Avatar billede tigertool Nybegynder
25. januar 2005 - 00:12 #17
Så kan du jo bare lave attributten statisk også.
Avatar billede tigertool Nybegynder
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)
Avatar billede muingaza Nybegynder
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.
Avatar billede arne_v Ekspert
25. januar 2005 - 03:27 #20
C# opretter også en tom constructor hvis man ikke selv opretter nogen.
Avatar billede tigertool Nybegynder
19. februar 2005 - 18:01 #21
Husk lige at lukke :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester