Heim  >  Artikel  >  Java  >  Die Rolle und Designprinzipien von Schnittstellen und abstrakten Klassen in Java

Die Rolle und Designprinzipien von Schnittstellen und abstrakten Klassen in Java

PHPz
PHPzOriginal
2024-05-02 16:48:01707Durchsuche

Die Rolle von Schnittstellen und abstrakten Klassen: Schnittstellen: Definieren Sie notwendige Verhaltensweisen und erzwingen Sie die Einhaltung spezifischer Spezifikationen durch Implementierungsklassen. Abstrakte Klasse: Definiert allgemeines Verhalten, erzwingt die Vererbung durch Unterklassen, stellt eine teilweise Implementierung bereit und ermöglicht Unterklassen die Anpassung spezifischer Verhaltensweisen. Designprinzipien: Schnittstelle: Halten Sie sie klein und fokussiert und definieren Sie das erforderliche Verhalten. Abstrakte Klasse: Deklariert nur abstrakte Methoden und stellt konkrete Methoden bereit, um ein gemeinsames Verhalten zu erreichen. Beispiel: In der Formklassenhierarchie definiert die Shape-Schnittstelle das Verhalten beim Erhalten der Fläche, die abstrakte Klasse AbstractShape stellt die Felder Breite und Höhe bereit und die Klassen Rechteck und Kreis erben die abstrakte Klasse und stellen die Flächenberechnungsmethode für eine bestimmte Form bereit .

Java 中接口和抽象类的作用和设计原则

Die Rolle und Designprinzipien von Schnittstellen und abstrakten Klassen in Java

Schnittstellen

  • definieren Methoden, stellen jedoch keine Implementierungen bereit.
  • Deklarieren Sie eine Reihe öffentlicher Konstanten.
  • Erzwingen Sie, dass die Klasse, die es implementiert, die Implementierung aller Methoden bereitstellt.
  • Syntax: public interface InterfaceName { ... public interface InterfaceName { ... }

抽象类

  • 定义方法,可以是抽象方法或具体方法。
  • 抽象方法没有实现,必须由子类实现。
  • 允许字段和构造函数。
  • 语法:public abstract class AbstractClassName { ... }

作用

接口

  • 实现解耦,允许类专注于自己的职责。
  • 促进模块化和可扩展性,使组件可以轻松地互换和扩展。
  • 定义行为合同,强制实现类遵守特定规范。

抽象类

  • 定义通用行为并强制子类继承它。
  • 提供部分实现,减少子类中的重复代码。
  • 提供钩子方法,允许子类定制特定行为。

设计原则

接口

  • 仅定义必须的行为。
  • 方法名称应清晰简明,表示预期行为。
  • 接口应该保持小而专注。

抽象类

  • 仅声明抽象方法,定义公共行为。
  • 提供具体方法以实现通用行为。
  • 考虑使用抽象类而不是接口,当需要共享实现时。

实战案例

考虑一个简单的形状类层次结构:

**`

Abstrakte Klasse

Methoden definieren, die abstrakte Methoden oder konkrete Methoden sein können.

Abstrakte Methoden werden nicht implementiert und müssen von Unterklassen implementiert werden.

Felder und Konstruktoren zulassen.

Syntax: public abstract class AbstractClassName { ...

Function

Interface

🎜🎜🎜 erreicht eine Entkopplung, sodass sich Klassen auf ihre eigenen Verantwortlichkeiten konzentrieren können. 🎜🎜Fördert Modularität und Erweiterbarkeit, sodass Komponenten einfach ausgetauscht und erweitert werden können. 🎜🎜Definieren Sie Verhaltensverträge, um Implementierungsklassen zur Einhaltung bestimmter Spezifikationen zu zwingen. 🎜🎜🎜Abstrakte Klassen🎜🎜🎜🎜definieren allgemeines Verhalten und zwingen Unterklassen, es zu erben. 🎜🎜Stellen Sie eine Teilimplementierung bereit, um doppelten Code in Unterklassen zu reduzieren. 🎜🎜Stellen Sie Hook-Methoden bereit, damit Unterklassen bestimmte Verhaltensweisen anpassen können. 🎜🎜🎜Designprinzipien🎜🎜🎜🎜Schnittstellen🎜🎜🎜🎜Definieren Sie nur notwendige Verhaltensweisen. 🎜🎜Methodennamen sollten klar und prägnant sein und das erwartete Verhalten angeben. 🎜🎜Schnittstellen sollten klein und fokussiert gehalten werden. 🎜🎜🎜Abstrakte Klasse🎜🎜🎜🎜Deklariert nur abstrakte Methoden und definiert öffentliches Verhalten. 🎜🎜Stellen Sie konkrete Methoden zur Umsetzung allgemeiner Verhaltensweisen bereit. 🎜🎜Erwägen Sie die Verwendung abstrakter Klassen anstelle von Schnittstellen, wenn eine gemeinsame Implementierung erforderlich ist. 🎜🎜🎜Praktischer Fall🎜🎜🎜Betrachten Sie eine einfache Shape-Klassenhierarchie: 🎜🎜**`java🎜interface Shape {🎜
double getArea();
🎜}🎜🎜abstract class AbstractShape implementiert Shape { 🎜
protected double width;
protected double height;

public AbstractShape(double width, double height) {
    this.width = width;
    this.height = height;
}

public double getWidth() {
    return width;
}

public double getHeight() {
    return height;
}
🎜}🎜🎜Klasse Rechteck erweitert AbstractShape {🎜
public Rectangle(double width, double height) {
    super(width, height);
}

@Override
public double getArea() {
    return width * height;
}
🎜}🎜🎜Klasse Kreis erweitert AbstractShape {🎜
public Circle(double radius) {
    super(radius, radius);
}

@Override
public double getArea() {
    return Math.PI * width * width;
}
🎜}🎜🎜öffentliche Klasse Main {🎜
public static void main(String[] args) {
    Shape rectangle = new Rectangle(4, 5);
    Shape circle = new Circle(3);

    System.out.println("Rectangle area: " + rectangle.getArea());
    System.out.println("Circle area: " + circle.getArea());
}
🎜}🎜
在这个例子中:

* `Shape` 接口定义了一个通用行为:获取形状面积。
* `AbstractShape` 抽象类提供了通用行为的通用实现,例如宽度和高度字段。
* `Rectangle` 和 `Circle` 类通过继承 `AbstractShape` 类来扩展形状类层次结构,并提供特定形状的具体方法来计算面积。

Das obige ist der detaillierte Inhalt vonDie Rolle und Designprinzipien von Schnittstellen und abstrakten Klassen in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn