Kann ich eine abstrakte Klasse definieren, ohne eine abstrakte Methode hinzuzufügen?
Kann ich eine abstrakte Klasse definieren, ohne eine abstrakte Methode hinzuzufügen?
Antworten:
Natürlich.
Das Deklarieren einer Klassenzusammenfassung bedeutet nur, dass Sie nicht zulassen, dass sie selbst instanziiert wird.
Das Deklarieren einer Methodenzusammenfassung bedeutet, dass Unterklassen eine Implementierung für diese Methode bereitstellen müssen.
Die beiden sind separate Konzepte, obwohl Sie in einer nicht abstrakten Klasse offensichtlich keine abstrakte Methode haben können. Sie können sogar abstrakte Klassen mit final
Methoden haben, aber niemals umgekehrt.
Ja, du kannst es schaffen. Warum versuchst du das nicht einfach?
Ja, du kannst. Die in Java verwendete abstrakte Klasse bedeutet, dass Sie kein Objekt der Klasse erstellen können. Und eine abstrakte Methode, für die die Unterklassen eine Implementierung für diese Methode bereitstellen müssen.
So können Sie eine abstrakte Klasse ohne abstrakte Methode einfach definieren.
Wie zum Beispiel :
public abstract class AbstractClass{
public String nonAbstractMethodOne(String param1,String param2){
String param = param1 + param2;
return param;
}
public static void nonAbstractMethodTwo(String param){
System.out.println("Value of param is "+param);
}
}
Das ist in Ordnung.
JA Sie können eine abstrakte Klasse ohne jede abstrakte Methode erstellen. Das beste Beispiel für eine abstrakte Klasse ohne abstrakte Methode ist HttpServlet. Die
abstrakte Methode ist eine Methode ohne Text. Wenn Sie mindestens eine Methode in der Klasse deklariert haben, muss die Klasse als deklariert werden abstrakt ist obligatorisch ABER wenn Sie die abstrakte Klasse deklariert haben, ist es nicht obligatorisch, die abstrakte Methode innerhalb der Klasse zu deklarieren.
Sie können keine Objekte der abstrakten Klasse erstellen, was bedeutet, dass sie nicht instanziiert werden können.
Ja, Sie können eine Klasse deklarieren, die Sie nicht selbst instanziieren können, nur mit Methoden, die bereits implementiert sind. Dies ist nützlich, wenn Sie in Zukunft abstrakte Methoden hinzufügen möchten oder wenn Sie nicht möchten, dass die Klasse direkt instanziiert wird, obwohl sie keine abstrakten Eigenschaften hat.
Ja, wir können eine abstrakte Klasse ohne abstrakte Methode deklarieren. Der Zweck der Deklaration einer Klasse als abstrakt besteht nicht darin, die Klasse zu instanziieren.
also zwei Fälle
1) abstrakte Klasse mit abstrakten Methoden.
Bei dieser Art von Klassen müssen wir eine Klasse von dieser abstrakten Klasse erben und die abstrakten Methoden in unserer Klasse überschreiben, z. B.: GenricServlet-Klasse
2) abstrakte Klasse ohne abstrakte Methoden.
Bei dieser Art von Klassen müssen wir eine Klasse von dieser abstrakten Klasse erben, z. B.: Der Zweck der HttpServlet-Klasse besteht darin, dass Sie die übergeordnete Logik erhalten können, wenn Sie Ihre Logik nicht in einer untergeordneten Klasse implementieren
Ja, wir können eine abstrakte Klasse ohne abstrakte Methoden haben, da beide unabhängige Konzepte sind. Das Deklarieren einer Klassenzusammenfassung bedeutet, dass sie nicht selbst instanziiert und nur in Unterklassen unterteilt werden kann. Das Deklarieren einer Methodenzusammenfassung bedeutet, dass die Methode in der Unterklasse definiert wird.
Ja, Sie können eine abstrakte Klasse ohne eine abstrakte Methode definieren. Wenn es jedoch keine Methode gibt, sollten Sie sich besser für eine Schnittstelle entscheiden
Ja, das kannst du machen.
Das Deklarieren von class abstract bedeutet, dass die Klasse von keiner anderen Klasse instanziiert wird.
und es sollte mindestens eine abstrakte Methode darin sein, und die Bedeutung davon, dass Sie abstrakte Methode in dieser Klasse deklarieren können, wenn Sie Methode nicht als ok deklarieren.
Beispiel:
public abstract class abs {
protected int cx = 0, cy = 0;
public void p() {
System.out.print("hello");
}
}
das wird sicher funktionieren.
Ja, du kannst. Manchmal wird Ihnen die Frage gestellt, wozu das gut ist. Die Antwort lautet: Manchmal müssen wir die Klasse daran hindern, selbst zu instanziieren. In diesem Fall möchten wir, dass der Benutzer unsere Abstract-Klasse erweitert und die untergeordnete Klasse instanziiert
Sie können, die Frage in meinem Kopf ist mehr, sollten Sie. Ich werde von Anfang an sagen, dass es keine feste Antwort gibt. Tun Sie das Richtige für Ihre aktuelle Situation.
Vererbung bedeutet für mich eine 'ist-eine'-Beziehung. Stellen Sie sich eine Hundeklasse vor, die um speziellere Untertypen (Elsässer, Pudel usw.) erweitert werden kann. In diesem Fall kann es richtig sein, die Hundeklasse abstrakt zu machen, da Untertypen Hunde sind. Stellen wir uns nun vor, dass Hunde ein Halsband brauchen. In diesem Fall macht die Vererbung keinen Sinn: Es ist Unsinn, eine Beziehung zwischen Hunden und Halsbändern zu haben. Dies ist definitiv eine "hat-eine" Beziehung, Kragen ist ein kollaborierendes Objekt. Es macht keinen Sinn, das Halsband abstrakt zu machen, damit Hunde eines haben können.
Ich finde oft, dass abstrakte Klassen ohne abstrakte Methoden wirklich eine 'has-a'-Beziehung ausdrücken. In diesen Fällen stelle ich normalerweise fest, dass der Code ohne Vererbung besser berücksichtigt werden kann. Ich finde auch, dass abstrakte Klassen ohne abstrakte Methode oft ein Codegeruch sind und zumindest dazu führen sollten, dass Fragen in einer Codeüberprüfung aufgeworfen werden.
Auch dies ist völlig subjektiv. Es kann durchaus Situationen geben, in denen eine abstrakte Klasse ohne abstrakte Methoden sinnvoll ist. Es liegt ganz in der Interpretation und Rechtfertigung. Treffen Sie die beste Entscheidung für alles, woran Sie arbeiten.
Eigentlich gibt es keinen Mittelwert, wenn eine abstrakte Klasse keine abstrakte Methode hat. Eine abstrakte Klasse ist wie ein Vater. Dieser Vater hat einige Eigenschaften und Verhaltensweisen. Wenn Sie als Kind ein Kind des Vaters sein wollen, sagt der Vater das Kind (Sie), das so sein muss, es ist unser MOTO, und wenn Sie es nicht wollen, Sie sind nicht mein Kind.
WindowDecorator
undCoffeeDecorator
sindabstract
Klassen, aber keine enthält eineabstract
Methode.