OOP Frage zu Hausaufgabe

Schwupsi

Aktives Mitglied
Hi Leute! Brauche eure Hilfe bei meiner Hausaufgabe.

Es gibt hier ein Package, ich nenne es mal "A", in dem ich folgende Klassen implementiert habe:

public class Unternehmen
public class Personenunternehmen extends Unternehmen
public class GmbH extends Unternehmen

dazu noch die Variablen, getter&setter, Konstruktoren etc. etc.

In dem Package "B" gibt es eine Klasse Person, die ich in "Personenunternehmen" importiert habe um in "Personenunternehmen" ein Objekt der Klasse Person erzeugen zu können.

Soweit so gut, ich hänge nun an folgenden Teilaufgaben:

2.a) Passen Sie Ihre Klasse Unternehmen so an, dass
jedes Unternehmen (d.h. jedes Objekt obj für das gilt „obj is-a Unternehmen“) entweder eine GmbH oder ein Personenunternehmen sein muss.

- Weiß jemand wie das gemeint ist und wie man das implementiert?


jedes Unternehmen eine Methode public boolean isKapitalgesellschaft() besitzen muss.

- ist hier gemeint einfach eine abstrakte Methode in "Unternehmen" implementieren?
also "public abstract boolean isKapitalgesellschaft(){}" ?


b) Implementieren Sie, dass jede GmbH eine Kapitalgesellschaft ist und jedes Personenunternehmen keine Kapitalgesellschaft ist.

- hier dann die abstrakten Methoden in den jeweiligen Subklassen spezifizieren und entweder true oder false zurückgeben, richtig?


Freue mich auf hilfreiche Antworten, Gruß!!!
 

Tarrew

Top Contributor
2a): Zum Beispiel deine Unternehmen-Klasse abstract machen.

-abstrakte isKapitalgesellschaft() Methode ist eine gute Idee.

b) Ja ;)
 

Schwupsi

Aktives Mitglied
Eine weitere kleine Problemstellung:

Ich soll eine Klasse "Pirat" implementieren mit dem Attribut "vermoegen".
Als Anmerkung ist gegeben: "vermoegen (soll beliebige Arten von Vermögen enthalten dürfen)"
Weiß nicht genau wie das gemeint ist.

Vorher habe ich eine Klasse "Goldschatz" implementiert die folgenden Konstruktor besitzt:
Java:
public Goldschatz(int anzahlMuenzen){
this.anzahlMuenzen = anzahlMuenzen;
}

Nun folgende Aufgabe:
"b) Bekanntlich besitzt jeder Pirat einen Namen und einen Goldschatz. Implementieren Sie deshalb in der Klasse Pirat einen Konstruktor mit den folgenden zwei Parametern:
name (Datentyp String)
anzahlMuenzen (Datentyp int),"

Hier würde ich gerne aus dem Konstruktor heraus den Konstruktor von "Goldschatz" aufrufen, aber ich weiß nicht wie .. Ist das überhaupt der richtige Gedanke?
So ungefähr:
Java:
public Pirat(String name, int anzahlMuenzen){
super(name);
//hier Konstruktor von Goldschatz aufrufen
}
 

Tarrew

Top Contributor
Einfach ein neues Objekt erstellen?

Wenn also ein Pirat das Attribut vermoegen hat könntest du ja einfach schreiben:
Java:
vermoegen=new Goldschatz(anzahlMuenzen);
 

Schwupsi

Aktives Mitglied
Einfach ein neues Objekt erstellen?

Wenn also ein Pirat das Attribut vermoegen hat könntest du ja einfach schreiben:
Java:
vermoegen=new Goldschatz(anzahlMuenzen);

Ok, verstanden soweit. Aber von welchem Typ soll dann das Attribut "vermoegen" sein? Eclipse bietet mir an es als "Goldschatz vermoegen" zu definieren. Aber dann gibt es Probleme mit anderen Methoden die Berechnungen mit double und int Variablen durchführen.
 

Tarrew

Top Contributor
Dafür solltest du vllt mal alle Klassen etc posten.
Der Satz "vermoegen (soll beliebige Arten von Vermögen enthalten dürfen)" lässt ja irgendwie vermuten, dass es eine Oberklasse "Vermoegen" gibt.
 

Schwupsi

Aktives Mitglied
Okay, ich versuche mal einen groben Überblick zu geben.

Package 1:
Klasse Vermoegen (Superklasse)
mit abstrakter Methode getWert()
Klasse Goldschatz erbt von Vermoegen (Subklasse)
Goldschatz hat einen default Konstruktor und einen Konstruktor der einen int Wert erwartet.
Außerdem noch die Methode getWert() die zwei Werte miteinander multipliziert und zurückgibt.



Package 2:
Klasse Person
Klasse Pirat erbt von Person
und hat Attribut "vermoegen" (weiß nicht von welchem Typ es sein soll) und zwei Konstruktoren,
einer erwartet einen (String) und der andere (String und int).

Was mir Probleme bereitet, ist das Attribut "vermoegen" (von welchem Typ soll es sein?) und wie ich das mit dem Konstruktor (String und int) mache, der gleichzeitig ein Objekt von Goldschatz erzeugen soll, bzw. dessen Konstruktor ansprechen soll, welcher einen int erwartet.

Klasse Vermoegen
Java:
public abstract class Vermoegen {
   
    public abstract double getWert();

}

Klasse Goldschatz
Java:
public class Goldschatz extends Vermoegen {

    final static double muenzwert = 55;
    int anzahlMuenzen;
   
    public Goldschatz(){};
   
    public Goldschatz(int anzahlMuenzen){
        this.anzahlMuenzen = anzahlMuenzen;
    }
   
    @Override
    public double getWert() {
        double gesamtwert;
        gesamtwert = getAnzahlMuenzen()*getMuenzwert();
       
        return gesamtwert;
    }


    public int getAnzahlMuenzen() {
        return anzahlMuenzen;
    }


    public void setAnzahlMuenzen(int anzahlMuenzen) {
        this.anzahlMuenzen = anzahlMuenzen;
    }


    public static double getMuenzwert() {
        return muenzwert;
    }
   
    public String toString(){
       
        return "Goldschatz -"+" Anzahl der Münzen: "+getAnzahlMuenzen()+
                ", Muenzwert: "+getMuenzwert()+", Gesamtwert: "+getWert();
    }
   
   

}

Klasse Pirat (anderes Package)
Java:
public class Pirat extends Person {
   
    //von welchem Typ? vermoegen;

    public Pirat(String name) {
        super(name);
       
    }
   
    public Pirat(String name, int anzahlMuenzen){
        super(name);
        // Objekt von Goldschatz erzeugen, wie?
    }
   
    public void erbeuteMuenzen(int beute){
        vermoegen = vermoegen + beute;
    }
   
    public void verprasseMuenzen(int ausgeben){
        vermoegen = vermoegen - ausgeben;
    }
   
    public String toString(){
       
        return"Pirat - Name: "+super.toString()+", Schatz: "+vermoegen;
    }
   
   
}
 

Joose

Top Contributor
Laut Anforderung sollte der Typ des Attribut "vermoegen" "Vermoegen" sein.
Da du aber im Konstruktor sowieso einen Goldschatz erstellst könntest du auch direkt den Typ Goldschatz verwenden.

Natürlich musst du dann die Methoden "erbeuteMuenzen" bzw. "verprasseMuenzen" anpassen damit diese mit dem Typen Vergmoegen/Goldschatz umgehen und richtig rechnen
 

Schwupsi

Aktives Mitglied
Habe es hinbekommen mit dem Konstruktor. Es hängt an den zwei Methoden, wo ich das Vermögen jeweils addiere bzw. subtrahiere. Nur lässt sich hier nicht mit Objekt&int rechnen, casten geht auch nicht. Hat jemand ne Ahnung?

Habe vermoegen als "Goldschatz vermoegen" deklariert.
 

Joose

Top Contributor
Warum rufst du nicht einfach eine Methode deines Objekts "vermoegen" auf? Damit kannst du ja den Anzahl der Münzen abfragen bzw. dann wieder neusetzen ;)
 

Oben