# Kommunikation zwischen zwei Klassen



## LionAge (5. Mai 2015)

Hallo liebe Community,

ich lerne gerade die Java-Programmierung, habe zuvor etwas C programmiert, somit ist nicht alles neu für mich - die Objektorientierung hingegen schon 

Arbeite mit einem BlueJ-Buch wo ich nun folgende Aufgabe habe:

Ich soll ein Bankkonto erstellen das folgende Methoden beherrscht:

Kontostand ausgeben
Inhaber ausgeben
einzahlen
abheben
überweisen

zusätzlich noch Konstruktoren, die bei der Erstellung eine Einzahlung zulassen und eine Art "Freundschaftswerbung".

Das hat soweit gut geklappt - siehe 


```
public class Konto 
{
    // Instanzvariablen
    
        int nummer;
        private String inhaber;
        private int kontoStand;
             
    // Konstruktoren

    Konto(int neueNummer, String name)
    {
        nummer = neueNummer;
        inhaber = name;
        kontoStand = 0;
    }
    
   
    Konto(int neueNummer, String name, int einzahlen)
    {
        nummer = neueNummer;
        inhaber = name;
        kontoStand += einzahlen;
    }
    
    Konto(int neueNummer, String name, int einzahlen, Konto empfänger, int werben)
    {
        nummer = neueNummer;
        inhaber = name;
        kontoStand += einzahlen;
        empfänger.einzahlen(60);
    
    
    
    }
    
    // Methoden
 
    int getKontoStand()
    {
        return kontoStand;
    }
    
    String getInhaber()
    {
        return inhaber;
    }
    
    void einzahlen(int betrag)
    {
        kontoStand += betrag;
    }
    
    void abheben(int betrag)
    {
        kontoStand -= betrag;
    }
    
    void überweisen (Konto empfänger, int betrag)
    {
        abheben(betrag);
        empfänger.einzahlen(betrag);
    }
    
    void werben (Konto empfänger, int betrag)
    {
        empfänger.einzahlen(betrag);
    }
}
```

Meine Aufgabe ist nun, den Inhaber in eine seperate Klasse auszulagern, der die folgenden Datenfelder hat:

Nachname
Vorname
Adresse

Ich habe natürlich etwas gelesen und gegoogelt. Mit *extends* kann ich ja z.b. von Klassen erben, aber eigentlich muss die Klasse Inhaber ja nicht von Konto erben oder? Ich brauche eine neue Klasse, die gewissen Methoden kann, die ich dann wiederum in der Klasse Konto aufrufe, am I right?

Dies war mein erster kümmerlicher Versuch


```
public class Inhaber extends Konto
{
    public String vorname;
    public String nachname;
    public String adresse;
}

 Inhaber(String neuerVorname, String neuerNachname, String neueAdresse)
    {
        vorname = neuerVorname;
        nachname = neuerNachname;
        adresse = neueAdresse;
    }
```

Mir fehlt da irgendwie der passende Denkanstoß oder Tipp wie ich nun fortfahren muss.

Schonmal Danke an potentielle Helfer :>


----------



## Enceladus271 (5. Mai 2015)

Es macht keinen Sinn Inhaber von Konto abzuleiten. Dies würde ja bedeuten, dass ein Inhaber auch ein Konto IST.
- Also erstmal das "extends Konto" weg.
- In der Klasse Inhaber sollten dann noch getter Methoden implementiert werden, wie z.B. getName().
-  Und in der Klasse Konto musst du dann "private String inhaber" durch  "private Inhaber inhaber" ersetzen. Alle Methoden in denen inhaber  verwendet wird, müssen dann entsprechend angepasst werden.


----------



## LionAge (7. Mai 2015)

vielen Dank, das hat jetzt geklappt. Auf dieses  < Inhaber inhaber > bin ich irgendwie kaum gestoßen in Literatur und Internet, aber jetzt kenn ich es ja :toll:


----------



## David Nienhaus (17. Apr 2018)

Hallo, ich verzweifle gerade an exakt der gleichen Aufgabe und ich komme trotz der Antworten hier nicht weiter :s

Ich verstehe einfach nicht, wie ich im Konstruktor der Klasse Konto die Klasse Inhaber implementieren kann.

Hier mein Code der Klasse Inhaber :


```
public class Inhaber
{
    public String vorname;
    public String nachname;
    public String adresse;
  
    public Inhaber(String neuerVorname, String neuerNachname, String neueAdresse){
        vorname = neuerVorname;
        nachname = neuerNachname;
        adresse = neueAdresse;
    }

     String getVorname()
    {
       return vorname;
    }
  
     String getNachname()
    {
       return nachname;
    }
  
     String getAdresse()
    {
       return adresse;
    }
}
```
 
Und heir mein Code der Klasse Konto
(Habe die Methoden und alles nochmal rausgeschmissen, um den Fokus erstmal auf das Konstruktorproblem zu setzen)


```
public class Konto
{
    int nummer;
    int kontoStand;
    Inhaber inhaber;

    Konto(int neueNummer, int betrag) {
    nummer = neueNummer;
    kontoStand = betrag;
    inhaber = new Inhaber();   // Hier meckert der compiler
    }

}
```

Der Fehercode bezieht sich auf die drei Strings.. ich habe leider keine ahnung wie das funktioniert.. echt zum verzweifeln :O
Ich hoffe auf schnelle Hilfe, ich brauche das ganze schon übermorgen :/


----------



## Robat (17. Apr 2018)

1. Das nächste mal bitte einen eigenen Thread aufmachen.
2. Dein Konstruktor der Klasse Inhaber sieht so aus `Inhaber(String neuerVorname, String neuerNachname, String neueAdresse)` .. demnach musst du dem Konstruktor auch 3 Strings übergeben.


----------



## David Nienhaus (17. Apr 2018)

Ach so, tut mir leid! Viele andere Foren verweisen immer auf die Suchfunktion damit nichts doppelt gefragt wird und da das hier wirklich die gleiche Aufgabe ist dachte ich es würde Sinn machen.

Okay ich wusste leider nicht wie das denn konkret auszusehen hat. Bin jetzt aber fündig geworden: ("","","").
Damit klappts 
Jetzt stehe ich vorm nächsten Problem.
Ich habe meine Klasse Inhaber mit drei Methoden ausgestattet und möchte diese jetzt in der Klasse Konto aufrufen.
Wie kann ich das machen? Bzw was mache ich falsch:

Inhaber Code:

```
public class Inhaber
{
    // Instanzvariablen - ersetzen Sie das folgende Beispiel mit Ihren Variablen
    public String vorname;
    public String nachname;
    public String adresse;
 
    public Inhaber(String neuerVorname, String neuerNachname, String neueAdresse){
        vorname = neuerVorname;
        nachname = neuerNachname;
        adresse = neueAdresse;
    }

    String getVorname()
    {
        return vorname;
    }
 
    String getNachname()
    {
        return nachname;
    }
 
    String getAdresse()
    {
        return adresse;
    }
}
```

Konto Code:


```
public class Konto
{
    int nummer;
    int kontoStand;
    Inhaber inhaber;

    Konto(int neueNummer) {
    nummer = neueNummer;
    kontoStand = 0;
    inhaber = new Inhaber("","","");
    }
 
    Konto(int neueNummer,int ersteinzahlung)
    {
        nummer = neueNummer;
        kontoStand += ersteinzahlung;
        inhaber = new Inhaber("","","");
    }
 
    Konto(int neueNummer,int einzahlen, Konto empfänger)
    {
        nummer = neueNummer;
        inhaber = new Inhaber("","","");
        kontoStand += einzahlen;
        empfänger.einzahlen(60);
    }
 
    int getKontoStand()
    {
        return kontoStand;
    }
 
    String getInhaber()
    {
     return inhaber.getVorname();
     return inhaber.getNachname();
     return inhaber.getAdresse();
    }
 
    void einzahlen(int betrag)
    {
        kontoStand += betrag;
    }
 
    void abheben(int betrag)
    {
        kontoStand -= betrag;
    }
 
    void überweisen (Konto empfänger, int betrag)
    {
        abheben(betrag);
        empfänger.einzahlen(betrag);
    }

}
```

Das Problem liegt bei der Methode getInhaber
(Die


----------



## Robat (17. Apr 2018)

Eine Methode wird nach einem return-Statement verlassen. Demnach werden die beiden Zeilen

```
return inhaber.getNachname();
return inhaber.getAdresse();
```
 nie aufgeführt werden.

Wenn du alle Informationen eines Inhabers zurückgeben willst musst du die einzelnen Strings verknüpfen und den zusammengefügten String zurückgeben.


----------



## David Nienhaus (17. Apr 2018)

Uff.. wie verknüpfe ich denn zwei Strings?


----------



## Robat (17. Apr 2018)

Na das sollte man aber schon mal gesehen haben 

```
String a  = "Hallo ";
String b = "Welt";
String c = a + b;
```


----------



## David Nienhaus (17. Apr 2018)

Ja wahrscheinlich schon, ich bin aber glaube ich wirklich ein hoffnungsloser Fall was Programmieren angeht 

Okay, das ist schonmal gut zu wissen! Allerdings weiß ich noch nicht, wie ich Die Informationen von zB. meiner getVorname Methode in einen String reinbekomme.

String v = inhaber.getVorname(); wäre jetzt meine erste Idee gewesen, das scheint aber leider nicht zu klappen..


----------



## Robat (17. Apr 2018)

Du musst es nicht mal zwischenspeichern. Deine Methoden geben ja Strings zurück... diese Strings kannst du verknüpfen und zurückgeben.


----------



## David Nienhaus (17. Apr 2018)

Aber auch wenn ich es nicht zwischenspeichere stehe ich noch immer vor dem selben Problem, ich weiß nicht wie ich das ganze konkret aufbauen muss.

sage ich einfach return inhaber.getVorname() + inhaber.getNachname() + inhaber.getAdresse(); ?


----------



## Robat (17. Apr 2018)

Das schöne am programmieren ist doch, dass man Dinge ausprobieren kann


----------



## David Nienhaus (17. Apr 2018)

Also ich finde gerade leider Garnichts schön daran.. ich sitze seit heute morgen an dieser Aufgabe und bin mittlerweile echt frustriert. Hinzu kommt dass ich echt Zeitdruck habe... Schön ist wirklich was anderes


----------



## David Nienhaus (17. Apr 2018)

Ich wäre wirklich mehr als dankbar, wenn mir jemand konkret anhand von einem kleinen Codebeispiel zeigen könnte wie es richtig geht


----------



## Robat (17. Apr 2018)

```
class Foo {
     private String x;
     private String y;
    
     public String getX() { return x; }
     public String getY() { return y; }
}

class Bar{
     private Foo foo;
     public Bar() { this.foo = new Foo(); }

     public String getAll() {
            return "X: " + foo.getX() + "; Y: " + foo.getY();
     }
}
```


----------

