Vererbung & Variablenübergabe

Status
Nicht offen für weitere Antworten.
H

hilflos

Gast
Hallo Leute,

mein Programm ist so aufgebaut, daß ich eine Oberklasse (Haustier) Haustiere mit Variablen & Methoden habe, von der 2 Unterklassen (HaustierW und HaustierM) abgeleitet werden, eine für männliche und eine für weibliche Haustiere. Diese Unterklassen unterscheiden sich in der Variablen Kreativitaet bzw Logik und der Methode Spielen. Männchen wollen Stöckchen holen, Weibchen wollen kuscheln. (Das nur zur Erklärung, wieso es überhaupt Unterklassen gibt. :) )
Dazu kommt noch eine Applikationsklasse mit der Main-Methode: Applikation.java

Soweit, so gut.
Nun möchte ich automatisch eine vom Benutzer eingegebene Anzahl von Haustieren mit bestimmten Eigenschaften wie Name, Alter, Gewicht erzeugen lassen. & da beginnen die Probleme.
Wo muß ich die Erzeugung implementieren? In einer meiner 4 vorhandenen Klassen oder in einer neuen?
Und wie schaffe ich es, mehrere Haustiere erzeugen zu lassen?

Mein Ansatz war dieser (in der Applikation):

Code:
boolean geschlecht = true; //wird weiter oben anstaendig erzeugt, spar ich mir jetzt hier..
for (int i=0; i<haustierAnzahl; i++){
Haustier[] t = new Haustier[haustierAnzahl];
  if (geschlecht==true){
     t[i]=new HaustierM();
     t[i].erzeugen();
     }
  else {
     t[i]=new HaustierW();
     t[i].erzeugen();

Die Methode erzeugen hab ich bisher in der Oberklasse Haustier stehen, wenn ich sie woanders hinschreib, schaff ich es nicht, sie aufzurufen. Innerhalb dieser Methode laß ich Name und Alter zur Kontrolle ausgeben - das Alter wird ausgegeben, als Name kommt 'null'. Ich versuche, den Namen wie folgt zu erzeugen:

(boolean geschlecht wird an die Methode übergeben. Wenn geschlecht == true, dann Männchen, sonst Weibchen.)

Code:
      String[] wNamen ={"Aika", "Petra", "Jenny"};
      String[] mNamen = { "Konstantin", "Manfred", "Paul"};
          int ort = (int) (2*Math.random());
      if (geschlecht==true){
          final String name =  mNamen[ort];
          }//if
      else {
           final String name = wNamen[ort];
           }//else
           int alter = (int) ((Math.random()*300)+1);

           System.out.println(alter);      //zufallsalter wird ausgegeben
           System.out.println(name);     //statt dem namen erscheint "null"


In der Applikation versuche ich, das Alter mit

Code:
             System.out.println(s[i].alter);

auszugeben, was aber auch nicht funktioniert. Die wichtigste Frage ist für mich daher im Moment: Wie bekomme ich die erzeugten Werte so in t gespeichert, daß ich sie in der Applikation ausgeben kann?
Und wie kann ich mehrere Haustiere von der Art erzeugen, daß ich erst t[0], dann t[1] & dann wieder t[0] aufrufen kann?

Ich hoffe, einer von euch kann - und mag - mir helfen.
Vielen Dank schon mal im Voraus!

Liebe Grüße
 

sliwalker

Top Contributor
Hoi,

erstmal hierzu:
Code:
      String[] wNamen ={"Aika", "Petra", "Jenny"}; 
      String[] mNamen = { "Konstantin", "Manfred", "Paul"};
      final String name = "";
      int ort = (int) (2*Math.random()); 
      int alter = (int) ((Math.random()*300)+1); 

      if (geschlecht)
      { 
          name =  mNamen[ort]; 
      }//if
      else 
      { 
           name = wNamen[ort]; 
       }//else 

       System.out.println(alter);      //zufallsalter wird ausgegeben 
       System.out.println(name);     //statt dem namen erscheint "null"

Du hast die Variable in einem else-Block deklariert, also ist sie auch nur dort gültig.

Zu Deinem zweiten Problem, wo Du die Erzeugung Deiner Instanzen vornimmst:

Man erzeugt Instanzen dort, wo sie gebraucht werden. Da Du ja in Deiner Main auf die Werte zugreifen willst, brauchst Du auch dort eine Instanz. Das ist nur logisch, obwohl es natürlich auch anders geht. Denke aber ma nicht das Du es anders lösen sollst. Ich verstehe nicht ganz wo Du Dein boolean geschlecht herkriegst. Gibt der Benutzer das auch ein? Wird das von ereugen() abgefragt? Da sehe ich nämlich dann Probleme.
Ach ja, und "geschlecht == true" ist unschön. Das if sucht nach einem true oder false, und ein boolean ist true oder false, da brauchst Du nicht künstlich mit == noch einen vergleich erzwingen, oder? ;)

greetz
SLi
 
H

hilflos

Gast
Hallo Sli!

Danke erstmal für deine Hilfe.

Das Geschlecht wird in der Applikation eingegeben bzw erzeugt, je nachdem, ob der Benutzer automatische oder manuelle Erzeugung auswählt.

Ich hab das mit der Erzeugung (und Belegung mit Werten) von mehreren Haustieren noch immer nicht verstanden;

Meine abstrakte Klasse Haustiere sieht etwa so aus:
Code:
abstract class Haustier{

String name;
boolean geschlecht;
int alter;
int gewicht;
int hunger;
int logik, kreativ;

essen(){
}

spielen(){
}

schlafen(){
}

In den Unterklassen HaustierM und HaustierW werden bei spielen() unterschiedliche Spiele gespielt. Gut.

Mein Problem ist, daß ich nicht weiß, wie ich es schaffe, mehrere Haustiere zu erzeugen, sagen wir mal 3, und denen dann für Alter, Gewicht, Gesundheit bestimmte Werte 'einzuspeichern'.

In meiner Klasse Applikation mit main() wird zunächst eine Haustieranzahl vom Benutzer eingegeben, danach soll er wählen können, ob er die Haustiere manuell mit Werten versehen möchte oder ob die Werte automatisch erzeugt werden. Bis dahin gehts noch.

Als nächstes würde ich gerne die Haustiere erzeugen (lassen) und eben konkrete Werte vergeben, die ich nachher wieder aufrufen kann. Hab leider gar keine Ahnung, wie;
Dachte eben, wie bereits geschrieben, daß das mit (gekürzt..):

Code:
         Haustier[] t = new Haustier[anzahl];
         for (int i=0; i<anzahl;i++){

              if (auto=='a'){
              //hier erfolgt die automatische Erzeugung, geschlecht als boolean.
              }

        else {
             //Manuelle Eingabe des Geschlechts (als boolean)
             }

          System.out.println("Ausgabe des Geschlechts zur Kontrolle: "+geschlecht);

           if (geschlecht)  {
               s[i]=new HaustierM();
               }
           else {
                s[i]=new HaustierW();
                 } 
         }

funktioniert. Das Geschlecht wird mir auch korrekt ausgegeben. So wie ich es jetzt verstehe, hab ich damit den Speicherplatz (?) für die gewünschte Anzahl von (leeren) Haustieren erzeugt, sowie ihnen gleich ihr Geschlecht gegeben. Oder? Wie bring ich da jetzt in jedes Haustier noch Name, Alter usw rein, so daß ich diese Werte in der Applikation selbst abrufen kann?

Die Werte wollte ich ursprünglich über eine Methode autoerzeugen() für automatische bzw. manuellerzeugen() für manuelle Erzeugung generieren. Bitte nicht falsch verstehen: Mein Problem ist nicht, wie ich ein zufälliges Gewicht o.ä. erzeuge, sondern wie ich dieses Gewicht an t so übergebe, daß es dort derart gespeichert ist, daß ich mit t.essen(t.gewicht); (oder so ähnlich..) die Methode essen() aus der Oberklasse aufrufen kann.
Ich hoffe, das war einigermaßen verständlich. Würde ich die Fachbegriffe alle kennen, könnte ich mich sicher deutlicher ausdrücken, ich bitte um Nachsicht. :)

Liebe Grüße!
 

sliwalker

Top Contributor
Hoi,

kein Problem. Hier versteht Dich keiner falsch. Du hast ja gute Ansätze und ich dachte Du hättest verstanden, wie Du die Werte in Deine Objekte bekommst. Denn das hast Du doch mit erzeugen schon getan oder nicht?

Naja ich zeig Dir mal ein bisschen was von dem wie ich es verstanden hab ;)
Wenn Du was anderes meintest, dann meld Dich nochmal. poste dann aber alle Deine Klassen komplett ;)

Code:
abstract class Haustier
{ 
private String name; 
private boolean geschlecht; 
private int alter; 
private int gewicht; 
private int hunger; 
private int logik, kreativ; 

public void essen()
{ 

} 

public void spielen()
{ 

} 

public void schlafen()
{ 

} 

public void setNameString name)
{
    this.name = name;
}

public String getName()
{
    return (this.name);
}

So erstmal dazu. Es ist unschön, wenn nicht schon inakzeptabel Deine Klassenattribute "public" zu deklarieren. Denn das sind sie wenn Du nichts schreibst. "public" heißt, dass man von überall direkt auf die variable zugreifen kann. Hat nichts mit OOP(Objektorientierter Programmierung) zu tun, also "private" setzen. Jetzt muss man nämlich Methoden benutzen um an die Variable zu kommen; sogenannte Getter und Setter.
Die schreibst Du jetzt für jede variable in Deine Klassen. Überall auf private ändern und public getter und Setter deklarieren und definieren.
Damit ist Dir jetzt ein Mechanismus gegeben, zB in Main, die Werte Deiner Vaiablen in den Objekten zu verändern.

zB Main: Ich gehe davon aus, dass der Benutzer IMMER ein Geschlecht eingeben muss. Bei jedem Haustier.
Code:
         Haustier[] t = new Haustier[anzahl]; 
         for (int i=0; i<anzahl;i++)
        { 
              geschlecht = askForGeschlecht();
              // "auto" muss auch noch abgefragt werden
              if (auto=='a')
              { 
                 if (geschlecht)
                 {
                     t[i] = new HaustierM();
                     // 'a' bedeutet "auto-erzeugen"
                     if (auto=='a')
                     {
                         t[i].autoErzeugen();
                     }
                     else
                     {
                         t[i].erzeugen();
                     }
                 }
                 else
                 {
                     t[i] = new HaustierW();
                     // 'a' bedeutet "auto-erzeugen"
                     if (auto=='a')
                     {
                         t[i].autoErzeugen();
                     }
                     else
                     {
                         t[i].erzeugen();
                     }

                 } 
              } 
        }

War es das? Ich hoffe ich hab es Dir so gelöst, dass Du es nachvollziehen kannst.

greetz
SLi
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
imocode Vererbung Problem mit Vererbung Java Basics - Anfänger-Themen 2
M Vererbung - Polymorphie Java Basics - Anfänger-Themen 37
L Java- Vererbung Java Basics - Anfänger-Themen 4
ineedhelpinjava Vererbung Java Basics - Anfänger-Themen 12
ineedhelpinjava Vererbung Java Basics - Anfänger-Themen 1
I JSON / XML Struktur mit Vererbung / Interfaces Java Basics - Anfänger-Themen 0
M Interface oder Vererbung? Java Basics - Anfänger-Themen 12
M Vererbung Java Basics - Anfänger-Themen 6
M Designentscheidung von Attributen/Methoden im Falle von Vererbung Java Basics - Anfänger-Themen 8
M Generics Vererbung Listen Java Basics - Anfänger-Themen 2
A Methoden Vererbung und Interface Java Basics - Anfänger-Themen 14
D Klassen und Vererbung Java Basics - Anfänger-Themen 2
U Vererbung Java Basics - Anfänger-Themen 7
D Vererbung Java Basics - Anfänger-Themen 3
K Schleife berechnet kein Ergebnis (Vererbung) Java Basics - Anfänger-Themen 6
00111010101 Objektorientiertes Programmieren mit Vererbung (Zahlen in Array verschwinden) Java Basics - Anfänger-Themen 3
W Zur Vererbung: Wann und wie? Java Basics - Anfänger-Themen 35
H Datenkapselung, Vererbung und UML Java Basics - Anfänger-Themen 16
districon Super-Stichwort/ Vererbung Java Basics - Anfänger-Themen 3
YaU Vererbung erstellt NullPointerException? Java Basics - Anfänger-Themen 4
G Vererbung Klassenattribute Java Basics - Anfänger-Themen 9
TimoN11 Frage zu Java-Vererbung (Cast) Java Basics - Anfänger-Themen 5
N Thema Vererbung Java Basics - Anfänger-Themen 31
A Vererbung Vererbung Übung Java Basics - Anfänger-Themen 5
B Vererbung - Sichtbarkeitsmodifikation - protected Java Basics - Anfänger-Themen 10
B Best Practice Unschlüssig ob Vererbung oder Interface Java Basics - Anfänger-Themen 2
G Java Vererbung Java Basics - Anfänger-Themen 8
Y Vererbung Konto - Anfangsprobleme Java Basics - Anfänger-Themen 7
A Vererbung Klassen im Bezug auf Auto´s Java Basics - Anfänger-Themen 18
A Klassen Vererbung und zusätzliche Unterklassen Java Basics - Anfänger-Themen 23
M Vererbung mit Enums Java Basics - Anfänger-Themen 8
Kirby.exe Vererbung im Detail erklärt? Java Basics - Anfänger-Themen 9
N Modellierung, vererbung, Java Basics - Anfänger-Themen 163
M Fehlendes Verständnis für dynamische Bindung und Vererbung Java Basics - Anfänger-Themen 13
W OOP Vererbung im Computerspiel Java Basics - Anfänger-Themen 7
J Probleme mit Vererbung Java Basics - Anfänger-Themen 4
I Vererbung Java Basics - Anfänger-Themen 13
W OOP Vererbung und Problem bei Zählschleife in einer Methode Java Basics - Anfänger-Themen 10
W Methoden Verständnisfrage Vererbung von Methoden Java Basics - Anfänger-Themen 14
V Vererbung Java Basics - Anfänger-Themen 2
J Frage zur Vererbung Java Basics - Anfänger-Themen 1
J Vererbung Java Basics - Anfänger-Themen 3
U Was löst meine NullPointerException aus? (Vererbung) Java Basics - Anfänger-Themen 12
O Vererbung Ueben mit kleiner Datenstruktur von Räumen Java Basics - Anfänger-Themen 10
O Umgang mit Vererbung verstehen Java Basics - Anfänger-Themen 4
A Vererbung/Interfaces/Generics Java Basics - Anfänger-Themen 12
O Vererbung änderung des Konstruktors Java Basics - Anfänger-Themen 8
L Vererbung Java Basics - Anfänger-Themen 5
E HashMap+Vererbung Java Basics - Anfänger-Themen 11
E Vererbung super-Methoden Aufruf Java Basics - Anfänger-Themen 3
B Java Vererbung Fragen (zu Code Beispiel) Java Basics - Anfänger-Themen 3
A Objekterstellung bei der Vererbung Java Basics - Anfänger-Themen 7
P Vererbung Warum funktioniert die Vererbung hier nicht Java Basics - Anfänger-Themen 14
S Vererbung Java mehrfach Java Basics - Anfänger-Themen 10
B Objekte zählen/ Vererbung/ Kopplung/ Interface/ Abstract Class Java Basics - Anfänger-Themen 5
A Klassen Vererbung privater Methoden und Member Java Basics - Anfänger-Themen 12
A Konstruktoren Vererbung Java Basics - Anfänger-Themen 3
ReinerCoder Vererbung von JFrame in einer Klasse entfernen Java Basics - Anfänger-Themen 5
W Vererbung, abstract und Konstruktoren Java Basics - Anfänger-Themen 30
J Vererbung und Methodenaufruf Java Basics - Anfänger-Themen 11
G Polymorphie, Vererbung, statischer Typ, Laufzeittyp Java Basics - Anfänger-Themen 2
H Vererbung mit private instanzvariablen Java Basics - Anfänger-Themen 9
S Vererbung Funktionsweise Code zur Vererbung Java Basics - Anfänger-Themen 1
C Methoden Vererbung private Attribute/public Methoden Java Basics - Anfänger-Themen 4
S Verständnis Vererbung Java Basics - Anfänger-Themen 3
D JavaFX Vererbung Java Basics - Anfänger-Themen 2
U Vererbung Generizität und Vererbung Java Basics - Anfänger-Themen 4
A Vererbung bei Klassen mit Objekt der Klasse im Konstruktor Java Basics - Anfänger-Themen 4
K Vererbung Octagon von Circle Java Basics - Anfänger-Themen 0
B Hilfe bei Vererbung Java Basics - Anfänger-Themen 2
D Vererbung Frage zum Klassenaufbau mit Vererbung Java Basics - Anfänger-Themen 1
T Vererbung und interface. Java Basics - Anfänger-Themen 1
S Gehaltsberechnung (Vererbung, abstrakte Methoden) Java Basics - Anfänger-Themen 6
S Vererbung Java Basics - Anfänger-Themen 1
F Vererbung in zwei Richtungen? Java Basics - Anfänger-Themen 14
D Vererbung / Polymorphie Java Basics - Anfänger-Themen 5
O Vererbung Java Basics - Anfänger-Themen 5
MiMa Vererbung Theorie OK, Praxis ?? Java Basics - Anfänger-Themen 4
Arif Vererbung Vererbung Variablen überschreiben Java Basics - Anfänger-Themen 1
C Vererbung - Ausgaben bestimmen Java Basics - Anfänger-Themen 6
S Vererbung Java Basics - Anfänger-Themen 10
L Setter und Getter/Vererbung Java Basics - Anfänger-Themen 6
C Konstruktoren und Vererbung Java Basics - Anfänger-Themen 2
J Kleinere Frage zur Vererbung/Objekterzeugung Java Basics - Anfänger-Themen 2
G Vererbung Java Basics - Anfänger-Themen 12
J Vererbung privater Variablen Java Basics - Anfänger-Themen 7
J Vererbung Vererbung von Methoden Java Basics - Anfänger-Themen 6
B Vererbung Java Basics - Anfänger-Themen 12
K Vererbung (super) Java Basics - Anfänger-Themen 2
A ArrayQueue mit Exceptions und Vererbung Java Basics - Anfänger-Themen 3
J Java: static bei Vererbung Java Basics - Anfänger-Themen 5
C Vererbung Java Basics - Anfänger-Themen 4
L Vererbung Java Basics - Anfänger-Themen 3
J Klassenorganisation | Vererbung Java Basics - Anfänger-Themen 1
B Vererbung Vererbung Java Basics - Anfänger-Themen 2
N Generics Vererbung Wildcard Interface Java Basics - Anfänger-Themen 8
A Benötige Hilfe bei Vererbung Java Basics - Anfänger-Themen 1
M Anfängerprobleme mit Vererbung Java Basics - Anfänger-Themen 27
J Vererbung Java Basics - Anfänger-Themen 9
F Vererbung von Attributen zwischen zwei Klassen Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben