Ich lerne die Konzepte der objektorientierten Programmierung. Einer von ihnen ist die Abstraktion. Ich verstehe, dass jede Klasse, die eine abstrakte Methode enthält, ebenfalls abstrakt sein sollte und dass eine abstrakte Klasse nicht instanziiert werden kann. Um eine abstrakte Klasse zu verwenden, muss ich sie von einer anderen ableiten.Verwendung von abstrakten Methoden und Klassen unklar
So weit so gut. Lassen Sie uns den folgenden Code nehmen:
public abstract class Games {
public abstract void start();
public void stop(){
System.out.println("Stopping game in abstract class");
}
}
class GameA extends Games{
public void start(){
System.out.println("Starting Game A");
}
}
class GameB extends Games{
public void start(){
System.out.println("Starting Game B");
}
}
Und dann haben wir eine Klasse mit einer main
Methode:
public class AbstractExample {
public static void main(String[] args){
Games A = new GameA();
Games B = new GameB();
A.start();
A.stop();
B.start();
B.stop();
}
}
Aber ich in der Klasse die folgenden geschrieben haben könnte Games
:
public void start(){
System.out.print("");
}
Dann es müsste nicht abstract
sein, die Ausgabe wäre die gleiche und ich wäre sogar in der Lage, die Games
Klasse zu instanziieren. Was also ist der Schlüssel für abstrakte Methoden und Klassen?
Es gibt eine [gute Erklärung] (https://softwareengineering.stackexchange.com/questions/96947/why-should-i-declare-a-class-as-an-abstract-class) auf dem Software-Engineering-Stack . – azurefrog
Wenn Sie sich einen Grund vorstellen können, "Spiele" zu einer konkreten Klasse zu machen, dann sollten Sie diese Methode auf jeden Fall umsetzen. Abstraktion ist für Klassen, für die es keinen Sinn hätte, Instanzen von. – jsheeran
Fragen Sie sich, ob die Methode 'start()', wie Sie vorschlagen, Sinn ergibt, wenn nicht, deshalb können Sie sie als abstrakt kennzeichnen: wenn es keinen Sinn ergibt, eine Dummy-Implementierung bereitzustellen und absolut klar zu machen, dass Klassen ** müssen ** es implementieren. –