Wie verbinde ich Klassen in BlueJ?

2 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

Klassen "verbindet" oder "koppelt" man, in dem  man z.B. die eine Klasse in der  andere Klasse verwendet.

(Voranmerkung: Klassen sind ja sozusagen Baupläne für konkrete Objekte)

Wenn du jetzt im Objekt a (der Klasse A) eine Objekt b (der Klasse B) mit new erzeugst, dann sind Klasse A und B miteinander "gekoppelt". Spricht du kannst in der Klasse A jetzt über a.methodenname() entsprechende Methoden aufrufen.


IchNeedeHelP 
Beitragsersteller
 19.02.2017, 12:46

Erstmal dankeschön:)

Wenn das hier die "Hauptklasse" sein soll, was könnte der Fehler sein, dass ich nicht den Namen des Kunden erhalte, wenn ich die Methode getkunde1Name aufrufe?

public class Autohaus

{

private Auto auto1;

private Kunde kunde1;

public Autohaus ()

{

auto1 = new Auto();

kunde1 = new Kunde();

}

public String getkunde1Name()

{

return kunde1.getName();

}

}

Das hier ist die Klasse Kunde:

public class Kunde

{

private int telefonnummer;

private String name;

public Kunde ()

{
}

public void setName(String pname)

{ this.name = pname;

}

public void setTelefonnummer(int ptelefonnummer)

{

this.telefonnummer = ptelefonnummer;

}

public String getName()

{

return name;

}

public int getTelefonnummer()

{

return telefonnummer;

}

}
0
DreiGegengifts  19.02.2017, 12:51
@IchNeedeHelP

Wo wird denn die Klasse Autohaus erstellt? Und wann/wo wird getkunde1Name aufgerufen?

Momentan (von dem was du mir geschickt hast) wird der Name des Kunden nie gesetzt. Daher kann die Methode auch keinen Namen zurückliefern.

0
IchNeedeHelP 
Beitragsersteller
 19.02.2017, 12:56
@DreiGegengifts

Bei dem fettgedruckten wird der Name gesetzt. Wenn ich dann bei einem Objekt dieser Klasse (also Kunde) getName ausführe, erhalte ich auch den Namen, aber wenn ich das über die Klasse Autohaus machen möchte, nicht.

public class Kunde

{

private int telefonnummer;

private String name;

public Kunde ()

{
}

public void setName(String pname)

{ this.name = pname;

}


public void setTelefonnummer(int ptelefonnummer)

{

this.telefonnummer = ptelefonnummer;

}

public String getName()

{

return name;

}

public int getTelefonnummer()

{

return telefonnummer;

}

}
0
DreiGegengifts  19.02.2017, 13:02
@IchNeedeHelP

Wie gesagt, um den Fehler zu finden müsste ich wissen, wann du was aufrufst und setzt.


Bei dem fettgedruckten wird der Name gesetzt.

Das ist klar. Aber wann/wo wird "setName" denn aufgerufen. Das ist eine der Fragen an dich.

0
IchNeedeHelP 
Beitragsersteller
 19.02.2017, 13:10
@DreiGegengifts

Als erstes erstelle ich ein Objekt der Klasse Kunde, setze den Namen und rufe ihn dann über die Methode getName auf, zur Überprüfung. Dann erstelle ich ein Objekt der Klasse Auto und mache das gleiche.

Und dann erstelle ich ein Objekt der Klasse Autohaus, wo ich den Namen des Kunden über diese Methode erhalten möchte:

public String getkunde1Name()

{

return kunde1.getName();

}

Da kommt dann immer nur null raus. Was mir noch aufgefallen ist, ist dass ich wenn ich ein Objekt der Klasse Autohaus erstelle, nicht ein Objekt der Klasse Kunde und Auto anklicken muss.

0
DreiGegengifts  19.02.2017, 13:15
@IchNeedeHelP

Der Fehler liegt darin:

Klassen sind quasi Baupläne für Objekte. Aber in der Regel können von einer Klasse ein, zwei oder ganz viele Objekte erzeugt werden. Jedes dieser Objekte ist für sich eigenständig (technisch gesprochen: jedes Objekt hat seinen eigenen Speicherbereich).

Du erstellst jetzt erst mal ein Objekt von der Klasse Kunde und gibst diesen Kunden einen Namen.

Danach erstellst du das Autohaus. In der Erstellungsmethode (nennt man auch "Konstruktor") erzeugst du einen neuen Kunden. Dem seinen Namen rufst du dann später ab. Aber der hat natürlich keinen. Du hast ihn ja nie gesetzt. 

Du hast also 2 Objekte vom Kunden. Und nur beim 1. Objekt hast du einen Namen gesetzt.

1
IchNeedeHelP 
Beitragsersteller
 19.02.2017, 13:18
@DreiGegengifts

Okay, dankeschön :) Wenn ich nun keinen neuen Kunden erstellen möchte, sondern auf den alten zugreifen möchte. Wie mache ich das?

0
DreiGegengifts  19.02.2017, 13:21
@IchNeedeHelP

Dann muss du dem Autohaus den von dir erstellten Kunden übergeben.

Dafür braucht das Autohaus eine sogenannte "Setter-Methode":

public void setKunde( Kunde kunde ){

          kunde1 = kunde;

}

Die Methode kannst du dann nach Erstellen des Autohauses aufrufen und dort deinen am Anfang erstellten Kunden dem Autohaus übergeben.

Sinnvoller wäre natürlich, du holst dir den Kunden, der schon im Autohaus ist (der wurde ja über den Konstruktor angelegt) und setzt darauf den Namen, statt vorher noch mal einen anzulegen.

1

Was verstehst du hier unter "verbunden"?

Es gibt keine Mechanic bei Java, nach der Klassen "verbunden" werden, wenn man nur Funktionen einer Klasse von einer anderen aufruft, werden die beiden in UML-Diagrammen in der Regel verbunden, aber zwischen UML und Java besteht keine enge Beziehung.

Einige verwenden einfach UML, um Java zu visualisieren.


IchNeedeHelP 
Beitragsersteller
 19.02.2017, 11:39

okay, also ich meine wahrscheinlich ein solches UML-Diagramm.. :D Wie muss ich denn jetzt die Methode in Klasse A aufbauen, um mit ihr eine Methode einer anderen Klasse aufrufen zu können?

0
PerfectMuffin  19.02.2017, 12:03
@IchNeedeHelP

Methode muss für die andere Klasse sichtbar sein, wenn es keine statische Methode ist, muss eine Instanz der Klasse vorliegen.

0
IchNeedeHelP 
Beitragsersteller
 19.02.2017, 12:47
@PerfectMuffin

ok, danke:) 

Wenn das hier die "Hauptklasse" sein soll, was könnte der Fehler sein, dass ich nicht den Namen des Kunden erhalte, wenn ich die Methode getkunde1Name aufrufe?

public class Autohaus

{

private Auto auto1;

private Kunde kunde1;

public Autohaus ()

{

auto1 = new Auto();

kunde1 = new Kunde();

}

public String getkunde1Name()

{

return kunde1.getName();

}

}

Das hier ist die Klasse Kunde:

public class Kunde

{

private int telefonnummer;

private String name;

public Kunde ()

{
}

public void setName(String pname)

{ this.name = pname;

}

public void setTelefonnummer(int ptelefonnummer)

{

this.telefonnummer = ptelefonnummer;

}

public String getName()

{

return name;

}

public int getTelefonnummer()

{

return telefonnummer;

}

}
0
PerfectMuffin  19.02.2017, 13:09
@IchNeedeHelP

Was für eine Ausgabe erwartest du? Das sollte "null" ausgeben. Der Kunde hat ja keinen Namen.

0
IchNeedeHelP 
Beitragsersteller
 19.02.2017, 13:12
@PerfectMuffin

Das stimmt. Und wenn ich den Namen vorher gesetzt habe, müsste dann nicht der neue Name angezeigt werden?

0