Maison  >  Article  >  Java  >  Le rôle et les principes de conception des interfaces et des classes abstraites en Java

Le rôle et les principes de conception des interfaces et des classes abstraites en Java

PHPz
PHPzoriginal
2024-05-02 16:48:01737parcourir

Le rôle des interfaces et des classes abstraites : Interfaces : Définir les comportements nécessaires et forcer les classes d'implémentation à se conformer à des spécifications spécifiques. Classe abstraite : définit un comportement commun, force les sous-classes à en hériter, fournit une implémentation partielle et permet aux sous-classes de personnaliser des comportements spécifiques. Principes de conception : Interface : restez petite et ciblée, et définissez le comportement nécessaire. Classe abstraite : déclare uniquement des méthodes abstraites et fournit des méthodes concrètes pour obtenir un comportement commun. Exemple : dans la hiérarchie des classes de forme, l'interface Shape définit le comportement d'obtention de la zone, la classe abstraite AbstractShape fournit les champs de largeur et de hauteur, et les classes Rectangle et Circle héritent de la classe abstraite et fournissent la méthode de calcul de surface pour une forme spécifique. .

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

Le rôle et les principes de conception des interfaces et des classes abstraites en Java

Interfaces

  • définissent des méthodes mais ne fournissent pas d'implémentations.
  • Déclarez une série de constantes publiques.
  • Forcer la classe qui l'implémente à fournir l'implémentation de toutes les méthodes.
  • Syntaxe : public interface InterfaceName { ... }public interface InterfaceName { ... }

抽象类

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

作用

接口

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

抽象类

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

设计原则

接口

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

抽象类

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

实战案例

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

**`

Classe abstraite

définit des méthodes, qui peuvent être des méthodes abstraites ou des méthodes concrètes.

Les méthodes abstraites ne sont pas implémentées et doivent être implémentées par des sous-classes.

Autoriser les champs et les constructeurs.

Syntaxe : public abstract class AbstractClassName { ... }

Function

Interface

🎜🎜🎜 réalise le découplage, permettant aux classes de se concentrer sur leurs propres responsabilités. 🎜🎜Favorise la modularité et l'extensibilité afin que les composants puissent être facilement interchangés et étendus. 🎜🎜Définissez des contrats de comportement pour forcer les classes d'implémentation à se conformer à des spécifications spécifiques. 🎜🎜🎜Classes abstraites🎜🎜🎜🎜définissent un comportement commun et forcent les sous-classes à en hériter. 🎜🎜Fournir une implémentation partielle pour réduire le code en double dans les sous-classes. 🎜🎜Fournissez des méthodes de hook pour permettre aux sous-classes de personnaliser des comportements spécifiques. 🎜🎜🎜Principes de conception🎜🎜🎜🎜Interfaces🎜🎜🎜🎜Définissez uniquement les comportements nécessaires. 🎜🎜Les noms des méthodes doivent être clairs et concis, indiquant le comportement attendu. 🎜🎜Les interfaces doivent rester petites et ciblées. 🎜🎜🎜Classe abstraite🎜🎜🎜🎜Déclare uniquement les méthodes abstraites et définit le comportement public. 🎜🎜Proposer des méthodes concrètes pour mettre en œuvre des comportements communs. 🎜🎜Envisagez d'utiliser des classes abstraites au lieu d'interfaces lorsqu'une implémentation partagée est requise. 🎜🎜🎜Cas pratique🎜🎜🎜Considérons une hiérarchie de classes de forme simple : 🎜🎜**`java🎜interface Shape {🎜
double getArea();
🎜}🎜🎜classe abstraite AbstractShape implémente 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;
}
🎜}🎜🎜class Rectangle étend AbstractShape {🎜
public Rectangle(double width, double height) {
    super(width, height);
}

@Override
public double getArea() {
    return width * height;
}
🎜}🎜🎜class Circle étend AbstractShape {🎜
public Circle(double radius) {
    super(radius, radius);
}

@Override
public double getArea() {
    return Math.PI * width * width;
}
🎜}🎜🎜public class 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` 类来扩展形状类层次结构,并提供特定形状的具体方法来计算面积。

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn