PHP-Editor Zimo nimmt Sie mit, um das Timing der Verwendung abstrakter Klassen und Schnittstellen in Java zu erkunden. Bei der Java-Programmierung ist die Entscheidung, wann abstrakte Klassen und wann Schnittstellen verwendet werden sollen, eine wichtige Entscheidung. Dieser Artikel beantwortet diese häufig gestellte Frage und hilft Ihnen dabei, besser zu verstehen, wie Sie in verschiedenen Situationen die geeignete abstrakte Klasse oder Schnittstelle auswählen.
Ich verstehe vage den Unterschied zwischen Abstraktion und Schnittstelle, aber was ich einfach nicht verstehen kann, ist, wann Abstraktion und wann Schnittstelle verwendet werden soll. Welche Variablen benötige ich, um eine Schnittstellenabstraktion auszuwählen und umgekehrt? Die meisten Online-Antworten sollen den Unterschied verdeutlichen, aber selbst ich verstehe sie. Ich weiß nicht, wann es angemessener ist.
Die allgemeine alte Regel lautet: Bleiben Sie bei Schnittstellen, bis Sie gezwungen sind, abstrakte Klassen zu schreiben.
Ein nicht instanziierbarer Typ in Java definiert eine öffentliche Schnittstelle, an die sich andere Typen interface
aussuchen halten können.
abstract
,因此您不需要使用单词 abstract
abstract
。现在情况已不再是这样,接口现在可以具有在 implement
In der neuesten Java-Version können Schnittstellen private
Schnittstellen dürfen niemals Konstruktoren oder Instanzvariablen haben. implement
abstract 类
只是一个无法实例化的类。抽象类不需要定义任何 abstract
public
, protected
und package-private. public
、private
、protected
Abstrakte Klassen können Methoden implementieren oder sie als abstrakt
behalten. Methoden in abstrakten Klassen abstrakt
und müssen als solche gekennzeichnet werden. abstract
。抽象类中的方法不是隐式 abstract
extend
ing 类必须使用 super
extend
一个类,可以是 abstract
类,也可以是具体类。类的 abstract
), um mit dem Fenster sowie der gesamten Swing-API zu kommunizieren. abstract class
es 应该是例外而不是常态。如果您需要维护某些内部状态,同时还让子类定义您自己的行为,则应该使用抽象类。一个很好的例子来自 java swing gui 库:AbstractButton
。 abstractbutton
是行为模糊地类似于窗口中按钮的事物的抽象父代,包括按钮、切换按钮和菜单中的项目。任何人都可以子类化 abstractbutton
并实现其成员来定义类似按钮的显示。但是 abstractbutton
还必须维护大量内部状态(其中大部分来自 jcomponent
. Wenn Sie für einige dieser Methoden eine Standardimplementierung bereitstellen und eine nach 2014 veröffentlichte Java-Version verwenden möchten, verwenden Sie eine Schnittstelle. Wenn Sie eine Standardimplementierung benötigen, aber immer noch in den 2000er-Jahren stecken, verwenden Sie abstrakte Klassen. Wenn Sie unabhängig von der Java-Version einen privaten Status (z. B. Instanzvariablen) oder eine benutzerdefinierte Initialisierung (z. B. Konstruktoren) benötigen, verwenden Sie abstrakte Klassen. interface
Angenommen, Sie haben eine Schnittstelle wie:
interface animal { string makenoise(); }
class cat implements animal { string makenoise() { return "meow"; } } class dog implements animal { string makenoise() { return "woof"; } }
. cat
或 dog
string makeanimalmakenoise(int animalid) { animal animal = pretendanimalservice.getdogorcat(animalid); animal.makenoise(); }
Angenommen, Sie haben eine abstrakte Klasse:
abstract class animal { public string makenoise() { return "whistle"; } abstract public string getname(); }
-Methode implementieren: getname
class Cat extends Animal { String getName() { return "Pussy"; } } class Dog extends Animal { String getName() { return "Fido"; } }
Methoden, haben aber auch Zugriff auf die makenoise
-Methode der übergeordneten Klasse, die bei Bedarf auch überschrieben werden kann. getname
方法,但它们也可以访问父类 makenoise
Das obige ist der detaillierte Inhalt vonWann sollte Abstraktion und wann Schnittstellen verwendet werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!