Vererbung

Mariexshhx

Bekanntes Mitglied
Hey, ich möchte in meiner Klasse diese Typen Unterscheidung loswerden. Ich habe schon einzelne Klassen für die einzelnen Typen erstellt und diese dann von Unit erben lassen. Ich weiß nur nicht wie ich mit den Methoden isLivingPlant(), isLivingBug() umgehen soll, damit ich hier meine Typen Unterscheidung nicht mehr brauche kann mir jemand helfen ? Die Methode act () habe ich für die einzelnenTypen von Unit überschrieben ...
 

Anhänge

  • Unit.java
    2,7 KB · Aufrufe: 2

httpdigest

Top Contributor
Deine gepostete erste Lösung mit nur einer Unit-Klasse macht schon Sinn.
Warum möchtest du hier Polymorphie einführen, wenn dann letztlich doch wieder der Aufrufer/Client wissen muss, um welche Art von Einheit es geht?
Vererbung ist nicht immer sinnvoll!
Insbesondere nicht, wenn man Flexibilität durch (Laufzeit-)Konfiguration oder Scripting haben möchte. Klassenhierarchien und ihre Ausprägungen sind ja fix.
Aber isLivingPlant() und isLivingBug() etc könnten dann eben in den konkreten Unterklassen einfach nur noch false/true zurückliefern.
 

Mariexshhx

Bekanntes Mitglied
Deine gepostete erste Lösung mit nur einer Unit-Klasse macht schon Sinn.
Warum möchtest du hier Polymorphie einführen, wenn dann letztlich doch wieder der Aufrufer/Client wissen muss, um welche Art von Einheit es geht?
Vererbung ist nicht immer sinnvoll!
Insbesondere nicht, wenn man Flexibilität durch (Laufzeit-)Konfiguration oder Scripting haben möchte. Klassenhierarchien und ihre Ausprägungen sind ja fix.
Aber isLivingPlant() und isLivingBug() etc könnten dann eben in den konkreten Unterklassen einfach nur noch false/true zurückliefern.
das war die Aufgabenstellung, dass man diese Typ Unterscheidung in Unit loswerden soll
Und Vererbung wollte ich Einführen damit ich weitere Arten wie z.B die Krähe einfacher hinzufügen kann
 

Robert Zenz

Top Contributor
Naja, von der Aufgabenstellung mal abgesehen (sowas solltest du immer gleich dazu schreiben, moeglichst so genau wie moeglich), wuerde ich eher die Unterscheidung in den Enum UnitType ziehen. Also jeder UnitType weisz selbst ob dieser eine Pflanze ist oder nicht. Das verschiebt die Logik aber natuerlich nur.

Was in dem Fall eventuell Sinn machen koennte ist ein Entity Component System. Also eine Unit hat Kompoenten welche wiederum das Verhalten bestimmen. Das sieht dann in etwa so aus:

Java:
public class Unit {
    public <COMPONENT_TYPE> COMPONENT_TYPE getComponent(Class<COMPONENT_TYPE> componentClass);
}

public class PlantProcessor implements Processor {
    public void process(Unit unit) {
        Plant plant = unit.getComponent(Plant.class);
      
        if (plant != null) {
            // Do something here with the plant.
        }
    }
}

// In der Logik:

List<Processor> processors = Arrays.asList(new PlantProcessor(), new BlubProcessor(), new BlaProcessor());

for (Processor processor : processors) {
    processor.process(unit);
}

Also die Logik was eine Einheit tut verschiebt sich dann von der Unit in den entsprechenden Processor.
 

Mariexshhx

Bekanntes Mitglied
Naja, von der Aufgabenstellung mal abgesehen (sowas solltest du immer gleich dazu schreiben, moeglichst so genau wie moeglich), wuerde ich eher die Unterscheidung in den Enum UnitType ziehen. Also jeder UnitType weisz selbst ob dieser eine Pflanze ist oder nicht. Das verschiebt die Logik aber natuerlich nur.

Was in dem Fall eventuell Sinn machen koennte ist ein Entity Component System. Also eine Unit hat Kompoenten welche wiederum das Verhalten bestimmen. Das sieht dann in etwa so aus:

Java:
public class Unit {
    public <COMPONENT_TYPE> COMPONENT_TYPE getComponent(Class<COMPONENT_TYPE> componentClass);
}

public class PlantProcessor implements Processor {
    public void process(Unit unit) {
        Plant plant = unit.getComponent(Plant.class);
     
        if (plant != null) {
            // Do something here with the plant.
        }
    }
}

// In der Logik:

List<Processor> processors = Arrays.asList(new PlantProcessor(), new BlubProcessor(), new BlaProcessor());

for (Processor processor : processors) {
    processor.process(unit);
}

Also die Logik was eine Einheit tut verschiebt sich dann von der Unit in den entsprechenden Processor.
ah okay vielen dank ! Wenn ich jetzt aber den enum typen loswerden will. Kann man ja in der Methode act in der Klasse Unit die Implementerierung "weglassen". Ich kann daraus aber ja keine abstrakte Methode machen, weil die Klasse ja nicht abstrakt sein kann, weil die Methoden zum bewegen der Spielfiguren ja gleich sind für alle unterschiedenlichen Typen von Spielfiguren. Erst hatte ich überlegt aus Unit ein Interface zu machen, macht aber ja aufgrund dessen keinen Sinn oder ? Aber was mache ich dann mit der Methode act, die dann keine Implementierung hat?
 

Mariexshhx

Bekanntes Mitglied
Deine gepostete erste Lösung mit nur einer Unit-Klasse macht schon Sinn.
Warum möchtest du hier Polymorphie einführen, wenn dann letztlich doch wieder der Aufrufer/Client wissen muss, um welche Art von Einheit es geht?
Vererbung ist nicht immer sinnvoll!
Insbesondere nicht, wenn man Flexibilität durch (Laufzeit-)Konfiguration oder Scripting haben möchte. Klassenhierarchien und ihre Ausprägungen sind ja fix.
Aber isLivingPlant() und isLivingBug() etc könnten dann eben in den konkreten Unterklassen einfach nur noch false/true zurückliefern.
muss ich nicht aber trotzdem immer eine Überprüfung für die Hitpoints mit implemetieren ?
 

Mariexshhx

Bekanntes Mitglied
Deine gepostete erste Lösung mit nur einer Unit-Klasse macht schon Sinn.
Warum möchtest du hier Polymorphie einführen, wenn dann letztlich doch wieder der Aufrufer/Client wissen muss, um welche Art von Einheit es geht?
Vererbung ist nicht immer sinnvoll!
Insbesondere nicht, wenn man Flexibilität durch (Laufzeit-)Konfiguration oder Scripting haben möchte. Klassenhierarchien und ihre Ausprägungen sind ja fix.
Aber isLivingPlant() und isLivingBug() etc könnten dann eben in den konkreten Unterklassen einfach nur noch false/true zurückliefern.
@Override
public boolean isLivingPlant() {
if(hitpoints>0){
return true;
}
else{
return false;
}
 
Ä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 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
1 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
J Konstruktor Problem bei Vererbung Java Basics - Anfänger-Themen 1

Ähnliche Java Themen

Neue Themen


Oben