Vererbung

Nepos

Mitglied
Hallo alle zusammen!

Ich probiere mich gerade in der Vererbung.
In der Aufgabe müssen Tiere kathegorisiert werden. Die Tiere haben alle die gleichen Eigenschaften.

Eine Nummer
Lieblingsfutter
Das Geräusch das sie machen
ob es ein Haustier ist

Ich wollte das so realisieren, doch dabei mache ich wohl was falsch. Was ist mein (gedanken-)fehler?

Ich hoffe ihr könnt mir helfen/ein paar Tipps geben:

Java:
public class ZooAnimal {
	private List<String> feed = new ArrayList<>();
	private int number;
	private String sound;
	private boolean pet;
	
	public ZooAnimal(int number, List<String> feed, String sound, boolean pet){
		this.number=number;
		this.feed=feed;
		this.sound=sound;
		this.pet=pet;
	}
	
	//Getter & Setter
	
	}
	
public class Feloidea extends ZooAnimal{

	public Feloidea(int number, List<String> feed, String sound, boolean pet) {
		super(number, feed, sound, pet);
		// TODO Auto-generated constructor stub
	}
}

public class Amurtiger extends Feloidea  {
private List<String> amurtiegerFeed = new ArrayList<>();
amurtiegerFeed.add("Fleisch");

	public Amurtiger(int number) {
                //Auch hier kann ich nicht mit der Liste arbeiten

		super(number, amurtiegerFeed, "Brüll", false);
		// TODO Auto-generated constructor stub
	}	
}
 
Zuletzt bearbeitet von einem Moderator:

njans

Top Contributor
Java:
amurtiegerFeed.add("Fleisch");
Das muss in eine Methode oder den Konstruktor

P.S. Fehlermeldungen sollte man immer mit angeben.
 
P

Pippl

Gast
Java:
amurtiegerFeed.add("Fleisch");
Dieser Teil sollte in einer Methode stehen.

Java:
	public Amurtiger(int number) {
                //Auch hier kann ich nicht mit der Liste arbeiten
...
Meinst du hier die Liste die du oben erstellt hast oder der Liste aus der Klasse ZooAnimal?
Wenn du die Liste der Klasse ZooAnimal meinst, liegt das daran das diese als private deklariert worden ist und somit nur in der Klasse ZooAnimal verfügbar ist. Deklariere sie als protected dann sollte sie in den Subklassen ebenfalls verfügbar sein.
 

Nepos

Mitglied
Vielen Dank!

Wenn ich das so mache:
Java:
public Amurtiger(int number, List<String> feed, String sound, boolean pet) {
		amurtiegerFeed.add("Fleisch");
		super(number, amurtiegerFeed, "Brüll", false);
		// TODO Auto-generated constructor stub
	}

oder (in dem Fall ist es auf protected gesetzt):

Java:
public Amurtiger(int number, List<String> feed, String sound, boolean pet) {
		feed.add("Fleisch");
		super(number, amurtiegerFeed, "Brüll", false);
		// TODO Auto-generated constructor stub
	}

Sagt er mir das nichts vor dem super() stehen darf.

Mit der methode werde ich das gleich ausprobieren...

EDIT:

Lösungsversuch per Methode sieht dann bei mir so aus:
Java:
public class Amurtiger extends Feloidea  {
	private List<String> amurtiegerFeed = new ArrayList<>();     //Fehlermeldung: Syntax error on token ";", , expected
	feedM;
	
	public Amurtiger(int number) {
		super(number, amurtiegerFeed, "Brüll", false);              //Fehlermeldung: Cannot refer to an instance field amurtiegerFeed while explicitly invoking a constructor
		// TODO Auto-generated constructor stub
	}
	
private void feedM(){
	amurtiegerFeed.add("Fleisch");
}

	
}

Nun mehren sich die Probleme. Siehe Kommentare
 
Zuletzt bearbeitet:
P

Pippl

Gast
Java:
public class Amurtiger extends Feloidea  {
    private List<String> amurtiegerFeed = new ArrayList<>();   // <-- diese liste brauchst du nicht, du hast ja in ZooAnimal schon eine Liste für das/die Lieblingsessen des Tieres 
    feedM;  // Methoden aufrufe können auch nur in Methoden stehen bzw. im Konstruktor. Außerdem fehlen die Klammern feedM();
    
    public Amurtiger(int number) {
        super(number, amurtiegerFeed, "Brüll", false);          // <-- es wird erst der Konstruktor der Super Klasse ausgeführt, und zu diesem Zeitpunkt ist die Liste amutiegerFeed noch nicht erstellt/verfügbar
    }
    
private void feedM(){
    amurtiegerFeed.add("Fleisch");
}
 
    
}


Hier ein möglicher Lösungsvorschlag! Wobei ich den Konstrukter der Klasse ZooAnimal angepasst habe (weiß ja nicht ob erlaubt)
Java:
public class ZooAnimal 
{
    private List<String> feed = new ArrayList<>();
    private int number;
    private String sound;
    private boolean pet;
    
    public ZooAnimal(int number, String sound, boolean pet)
    {
        this.number=number;
        this.sound=sound;
        this.pet=pet;
    }
    
    public void addFeed(String newFeed)
    {
        this.feed.add(newFeed);    
    }
}
    
public class Feloidea extends ZooAnimal
{
    public Feloidea(int number, String sound, boolean pet) 
    {
        super(number, sound, pet);
    }
}
 
public class Amurtiger extends Feloidea
{ 
    public Amurtiger(int number) 
    {
        super(number, "Brüll", false);
        super.addFeed("Fleisch");  // 'super' deshalb, weil es ja die Methode einer Parentclass ist
    }   
}
 
Zuletzt bearbeitet von einem Moderator:

Nepos

Mitglied
[JAVA=2]
private List<String> amurtiegerFeed = new ArrayList<>(); // <-- diese liste brauchst du nicht, du hast ja in ZooAnimal schon eine Liste für das/die Lieblingsessen des Tieres
[/code]

Da hast Du recht, das war so eine Hilfskonstruktion da ich nicht weiß wie ich das anders, direkt in den Konstruktoraufruf, schreiben kann.

Dein Kritik mit der Methode ist berechtigt. Da ich nichts vor super(...) schreiben darf, bleibt mir nur noch die Möglichkeit es direkt in super(...) zu schreiben. Nur wie?

Was besseres als:
Java:
super(number, new ArrayList<String>("Fleisch"), "Brüll", false);
..ist mir nicht eingefallen und google sagt mir auch nichts gescheites.

Habt ihr einen Hinweis für michß
 
P

Pippl

Gast
Was besseres als:
Java:
super(number, new ArrayList<String>("Fleisch"), "Brüll", false);
..ist mir nicht eingefallen und google sagt mir auch nichts gescheites.

Habt ihr einen Hinweis für michß

Java:
List<String> places = Arrays.asList("Buenos Aires", "Córdoba", "La Plata");
oder
Java:
new ArrayList<String>(){"Fleisch"} // bin mir gerade nicht sicher ob das so in Java auch geht
Das ganze natürlich entsprechend auf deinen Aufruf im Konstruktor angepasst
 

Nepos

Mitglied
Das geht leider nicht:
Java:
new ArrayList<String>(){"Fleisch"}

Aber das:
Java:
super(number, Arrays.asList("Fleisch"), "Brüll", false);

Vielen, vielen Dank! :)

Ich habe noch eine Frage (ich will es ja begeifen und nicht nur eine Lösung für dieses dämliche Beispiel...):

Java:
public class ZooAnimal {
	protected List<String> feed = new ArrayList<>();
	private int number;
	private String sound;
	private boolean pet;

...



public class Amurtiger extends Feloidea  {
	
	public Amurtiger(int number) {
		super(number, Arrays.asList("Fleisch"), "Brüll", false);
		feed.add("Fleisch2");
	}	
}

wenn ich feed.add("Fleisch2"); dazuschreibe gibt mir Eclipse beim Kompelieren ein Fehler aus (vorher jedoch nicht). Was läuft da schief?
 

Nepos

Mitglied
Java:
Exception in thread "main" java.lang.UnsupportedOperationException
	at java.util.AbstractList.add(Unknown Source)
	at java.util.AbstractList.add(Unknown Source)
	at main.Amurtiger.<init>(Amurtiger.java:9)
	at main.Main.main(Main.java:15)
(Amurtiger.java:9):
[JAVA=9]
feed.add("Fleisch2");
[/code]
(Main.java:15):
[JAVA=9]
public class Main {

public static void main(String[] args) {
// TODO Auto-generated method stub
List<ZooAnimal> animals = new ArrayList<>();

animals.add(new Amurtiger(1)); //<--HIER

for (ZooAnimal tmpAnimal : animals){
System.out.println(tmpAnimal.toSting());
}
}
[/code]
 

KSG9|sebastian

Top Contributor
Poste doch mal den ganzen Code..da fehlt doch die Hälfte?!

Das Problem ist wohl, dass du sowas tust:

Code:
Arrays.asList("a").add("b");

Arrays.asList liefert eine Liste zurück welche in ihrer Größe nicht verändert werden darf...d.h. set() ist erlaubt, add/remove jedoch nicht.

Und lies dir nochmal die Beiträge von den anderen durch, da steht eigentlich die Lösung drinnen..


Edit: Eine einzelne Zeile Code zu posten aus der Klasse die den Fehler wirft ist nicht hilfreich. Das Problem liegt im Konstruktor der Klasse..wie oben beschrieben..versuch etwas zu Arrays.asList hinzuzufügen...
 

Nepos

Mitglied
Hier der gesamte Quelltext:

Java:
public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		List<ZooAnimal> animals = new ArrayList<>();
		
		animals.add(new Amurtiger(1));
		
		for (ZooAnimal tmpAnimal : animals){
			System.out.println(tmpAnimal.toSting());
		}
	}

Java:
public class ZooAnimal {
	protected List<String> feed = new ArrayList<>();
	private int number;
	private String sound;
	private boolean pet;
	
	public ZooAnimal(int number, List<String> feed, String sound, boolean pet){
		this.number=number;
		this.feed=feed;
		this.sound=sound;
		this.pet=pet;
	}
	
	public List<String> getFeed() {
		return feed;
	}
	public void setFeed(List<String> feed) {
		this.feed = feed;
	}
	public int getNumber() {
		return number;
	}
	public void setNumber(int number) {
		this.number = number;
	}
	public String getSound() {
		return sound;
	}
	public void setSound(String sound) {
		this.sound = sound;
	}
	public boolean isPet() {
		return pet;
	}
	public void setPet(boolean pet) {
		this.pet = pet;
	}
	
	public String toSting(){
		String result= "#" + number;
		result += "\n\t ";
		for (String s : feed){
			result += s + ", ";
		}
		result += "\n\t ... macht: " + sound;
		result += "\n\t ...ist ein Haustier: " + pet;
		
		return result;
		
	}
}

Java:
import java.util.Arrays;

public class Amurtiger extends Feloidea  {
	
	public Amurtiger(int number) {
		super(number, Arrays.asList("Fleisch"), "Brüll", false);
	}	
}

Java:
public class Feloidea extends ZooAnimal{

	public Feloidea(int number, List<String> feed, String sound, boolean pet) {
		super(number, feed, sound, pet);
		// TODO Auto-generated constructor stub
	}
}

Ich dachte das Array.asList() wird an eine ArrayListe übegeben (in ZooAnimal) und somit den Charakter von einer Arraylist und nicht von einem Array hat.
Bisher hat das nur mit dem Array.asList() geklappt (alle anderen idden habe ich nicht zum laufen bekommen) -- das Programm läuft.

mich würde es dennoch interessieren :).
 

KSG9|sebastian

Top Contributor
Folgendes Problem:

Du rufst den Konstruktor von ZooAnimal auf mit

Java:
super(..., Arrays.asList(..));

Im Konstruktor dann:

Java:
public ZooAnimal(..List<String> feed..){
   this.feed = feed;
}

Dadurch wird die Liste von Arrays.asList als Instanzvariable "gespeichert". Nun versuchst du, zu dieser Liste etwas hinzuzufügen, was aber nicht funktioniert, weil Arrays.asList eine Liste mit fester Größe zurückliefert.

Eine Lösung wäre z.B.

Java:
class ZooAnimal{
   ...
 
   public ZooAnimal(int number, String sound, boolean pet){
        this.number=number;
        this.feed=new ArrayList<String>();
        this.sound=sound;
        this.pet=pet;
   }
   public void addFeed(String f) { feed.add(f); }
}

class Amurtiger {
..
   public Amurtiger(int number) {
        super(number, "Brüll", false);
        addFeed("Fleisch");
    } 
..
}
 
Ä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


Oben