# Abstrakte Klassen



## lucyyy (18. Jan 2021)

Hello,
ich wollte einmal fragen, wie ich den redundanten Code in den Subklassen von einer abstrakten Methode entfernen kann.
Meine Subklassen haben gleiche Methoden wie die Superklasse, allerdings bekomme ich es nicht hin die Methoden zu entfernen,
ohne das ein Fehler auftretet.


----------



## White_Fox (18. Jan 2021)

Naja...indem du du redundanten Teile in der Superklasse implementierst.

Wenn sich die Methoden in kleinen Details unterscheiden, z.B. nur ein anderes Enum verwendet wird oder so, dann wird das in eine abstrakte Methode ausgelagert.

Edit: Beispiel:

```
enum SomeEnumForEveryConcreteClass{
    ENUMA,
    ENUMB,
    ENUMC
}


public abstract class SuperClass{
    public abstract void someMethodProcessingAnEnum();
}

public class ClassA{
    @Override
    public void someMethodProcessingAnEnum(){
        //...do something with SomeEnumForEveryConcreteClass.A
    }
}


//Oder:
public abstract class SuperClass{
    public void someMethodProcessingAnEnum(){
        //...do all what you have to do, but do it with getEnum() here
    }
    
    protected abstract SomeEnumForEveryConcreteClass getEnum();
}

public class ClassA{
    @Override
    protected SomeEnumForEveryConcreteClass getEnum(){
        return SomeEnumForEveryConcreteClass.A;
    }
}
```


----------



## lucyyy (18. Jan 2021)

White_Fox hat gesagt.:


> Naja...indem du du redundanten Teile in der Superklasse implementierst.
> 
> Wenn sich die Methoden in kleinen Details unterscheiden, z.B. nur ein anderes Enum verwendet wird oder so, dann wird das in eine abstrakte Methode ausgelagert.


Ja aber irgendwie funktioniert das nicht.
Die Methoden sind alle in der Superklasse gleich (fast alle) und wenn ich Diesen dann in den Subklassen entferne, failed der Test.


----------



## White_Fox (18. Jan 2021)

Na, dann poste doch mal deinen Code, vielleicht finden wir ja was.

Edit:


lucyyy hat gesagt.:


> und wenn ich Diesen dann in den Subklassen entferne, failed der Test.



Ja, das ist aber logisch, wie soll das auch funktionieren. Dann brauchst du eine funktionierende Implementation in deinem Unittest, die de abstrakten Teile implementiert.

Ich mache für so etwas meist eine innere Klasse im Test.


----------



## mrBrown (18. Jan 2021)

Duplikat von Abstrakte Klasse?


----------



## lucyyy (18. Jan 2021)

Vielen Dank für die Hilfe!
Ich hatte einfach nur einen Fehler im Konstruktor der Superklasse haha


----------

