[JAVA] Pourquoi implémenter une classe abstraite (Résumé)

Je n'étais pas tout à fait sûr des avantages de l'implémentation d'une classe abstraite, j'ai donc résumé ce qu'est une classe abstraite et à quoi elle est destinée (et quels avantages) elle a.

Contenu de cet article

--Qu'est-ce qu'une classe abstraite? ―― Qu'est-ce qui vous rend heureux lorsque vous implémentez une classe abstraite

Qu'est-ce qu'une classe abstraite?

Une classe abstraite est une classe ** qui a une ou plusieurs méthodes abstraites. Les classes abstraites n'ont aucune signification en elles-mêmes et ne fonctionnent que lorsqu'elles sont héritées par des sous-classes.

nom de classe de classe abstraite{
Méthode abstraite
}

Alors, qu'est-ce qu'une méthode abstraite?

Une méthode abstraite est une méthode écrite sous la forme suivante.

nom de classe de classe abstraite{
abstract Type de retour Nom de la méthode(Argument type Argument);
}

Comme mentionné ci-dessus, une méthode abstraite définit uniquement le type de retour, le nom de la méthode, le type d'argument et le nombre d'arguments après abstract, et n'a pas d'implémentation. L'implémentation concrète est implémentée dans une sous-classe qui hérite de cette classe abstraite.

Caractéristiques de la classe abstraite

  1. Les sous-classes qui héritent de la classe abstraite doivent remplacer la méthode abstraite dans la classe abstraite
  2. Vous devez écrire le constructeur dans une sous-classe
  3. Ne peut pas être instancié directement
  4. L'héritage multiple n'est pas possible

Intention d'implémenter des classes abstraites

Le mérite de l'implémentation d'une classe abstraite est * "Une sous-classe qui hérite d'une classe abstraite doit remplacer la méthode abstraite dans la classe abstraite" * décrite dans la caractéristique 1 de la classe abstraite.

Les avantages spécifiques que cela signifie sont ... ** Vous pouvez créer des règles au niveau de la mise en œuvre lorsque vous développez avec plusieurs personnes! **est. Même ainsi, je ne pense pas que vous puissiez honnêtement comprendre ce mérite à moins de faire l'expérience d'un développement à grande échelle dans une entreprise. (Je n'ai pas du tout compris: parapluie :)

Alors, supposons que nous faisons du développement à grande échelle (développement avec plusieurs personnes et la quantité de code est de milliers à des centaines de milliers de lignes), et nous ajouterons des fonctions et des écrans simples au programme. Disons que vous devez le réparer.

Dans le cas d'une simple addition de fonction, la logique de la méthode est un peu différente, mais dans de nombreux cas, ce que vous voulez faire est à peu près le même que la classe que vous avez déjà implémentée. Dans un tel cas, si le nom de la méthode est différent selon la classe même si le même traitement est effectué, il peut prendre du temps pour comprendre quel traitement est effectué: grave:

En s'assurant qu'il est écrit par remplacement forcé, qui est une caractéristique des classes abstraites, les effets suivants peuvent être obtenus: sparkles :: sparkles:

En implémentant une classe abstraite, vous pouvez ** créer des règles au niveau de l'implémentation lorsque vous développez avec plusieurs personnes **! !! C'est l'une des raisons et l'intention d'implémenter des classes abstraites.

Ensuite, je présenterai des modèles de conception et des exemples de programmes qui utilisent des classes abstraites.

Qu'est-ce que le modèle de méthode de modèle?

La méthode de modèle est un modèle de conception qui utilise des classes abstraites pour définir le cadre de traitement dans les superclasses et le contenu spécifique dans les sous-classes.

Caractères de la méthode de modèle

Exemple d'implémentation de méthode de modèle

Par souci de clarté, il s'agit d'un exemple de programme très simple qui sort simplement le journal. La classe Player joue le rôle de AbstractClass dans les caractères de la méthode Template, et la classe MusicPlayer et la classe VideoPlayer jouent le rôle de ConcreteClass. Le diagramme de classes est le suivant.

Player.png

Jetons un coup d'œil au programme. Tout d'abord, le Superclass Player a trois méthodes abstraites: L'implémentation concrète de la méthode abstraite se fait dans chacune des sous-classes MusicPlayer et VideoPlayer.

public abstract class Player {
    abstract void read();
    abstract void write();
    abstract void Playback();
}

La classe MusicPlayer et la classe VideoP qui héritent de Player remplacent toutes les méthodes abstraites de la classe Player et décrivent le contenu de traitement. Le contenu du traitement peut être divisé en sous-classes comme indiqué ci-dessous. En d'autres termes, même si le nom de la méthode héritée est le même, le contenu du traitement peut être modifié pour chaque sous-classe héritée. Les sous-classes MusicPlayer et VideoPlayer sont les suivantes.

public class MusicPlayer extends Player {

   
    @Override
    void read() {
        Log.d("Music Player","read");
    }

    @Override
    void write() {
        Log.d("Music Player","write");
    }

    @Override
    void playback() {
        Log.d("Music Player","playback");
    }
}
public class VideoPlayer extends Player {

    @Override
    void read() {
        Log.d("Video Player","read");
    }

    @Override
    void write() {
        Log.d("Video Player","write");
    }

    @Override
    void palyback() {
        Log.d("Video Player","playback");
    }
}

Enfin, la classe principale. Voici le point!

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        MusicPlayer musicplayer = new MusicPlayer();
        VideoPlayer videoplayer = new VideoPlayer();

        Player[] player = {musicplayer,videoplayer};
        for(int i=0; i<player.length; i++) {
            player[i].read();
            player[i].write();
            player[i].playback();

        }

    }

}

Dans la classe principale, l'instance MusicPlayer et l'instance VideoPlayer sont rassemblées dans un seul tableau Player. Ensuite, il est transformé en une boucle for pour appeler trois méthodes. Dans cette partie, le fait est que l'instance stockée dans player [i] ne vérifie pas le type de sous-classe avec instanceof etc.: Point_up:

Ceci est possible car il existe une superclasse commune appelée Player. De cette manière, «s'assurer que toute instance de sous-classe affectée à une variable de type superclasse fonctionne correctement» est un principe général d'héritage, non limité au modèle de méthode modèle. Ce qu'on appelle le ** polymorphisme **.

Que faire si vous n'utilisez pas le modèle de méthode de modèle? MusicPlayer et VideoPlayer devront être séparés et les instances de chaque classe devront être créées séparément.

En d'autres termes L'introduction d'une classe abstraite ** vous permet d'assigner des instances d'autres sous-classes (MusicPlayer et VideoPlayer) à la variable de référence d'une superclasse (Player), vous pouvez donc utiliser une méthode de description unifiée pour chacune. Vous pouvez appeler la méthode de substitution de! Je suis heureux que ** (^^): white_sun_small_cloud:

à la fin

J'ai écrit sur les raisons pour lesquelles j'implémente une classe abstraite, en partie parce que je n'étais pas sûr. L'implémentation d'une classe abstraite augmente la quantité de code et complique la structure, il n'est donc pas souhaitable d'implémenter une classe abstraite pour quoi que ce soit, mais elle présente de tels avantages. Je serais heureux si vous pouviez transmettre.

J'ai également introduit un modèle de conception appelé Méthode de modèle qui utilise des classes abstraites et un exemple d'implémentation, mais je vous serais reconnaissant si vous pouviez signaler toute erreur.

Recommended Posts

Pourquoi implémenter une classe abstraite (Résumé)
java (classe abstraite)
[java] Classe abstraite
Pourquoi java autorise la classe finale A {classe abstraite B {}}
À propos de la classe abstraite de Java
Interface / classe abstraite / remplacement
Mémo d'apprentissage Java (classe abstraite)
Créer une classe immuable avec JAVA
Pourquoi les variables de classe sont-elles nécessaires? [Java]
Différence entre interface et classe abstraite