Upcast (Java) qui peut réduire la quantité de changement lorsque la spécification est modifiée

À propos de upcast

Qu'est-ce que upcast

Upcast est une fonctionnalité qui permet à une sous-classe (classe enfant) d'agir implicitement comme une superclasse (classe parent).

Que peut-on réaliser en utilisant

Lors du développement, les changements de spécification sont inhérents. Si vous écrivez un programme en utilisant upcast au moment d'un tel changement de spécification, vous pouvez minimiser la réécriture du programme en raison du changement.

Permettez-moi de vous donner un exemple du programme.

Code source

Main.java


public class Main{
  public static void main(String[] args){
    Life_form life_form = new Life_form();
    life_form.makeSound();

//Upcast
    life_form = new Cat();
    life_form.makeSound();
  }
}

Life_form.java


//Classe parent
public class Life_form{
  public void makeSound(){
    System.out.println("???");
  }
}

Cat.java


//Classe enfant
public class Cat extends Life_form{
  @Override
  public void makeSound(){
    System.out.println("nyaa");
  }

  public void catPunch(){
    System.out.println("Pain de chat");
  }

}

Dog.java


//Il est utilisé dans la rubrique «Veuillez modifier les spécifications».
public class Dog extends Life_form {
  @Override
  public void makeSound(){
    System.out.println("Kuhn!");
  }

  public void dogAttack(){
    System.out.println("Mordant");
  }
}

Description des classes Life_form et Cat

-La classe Life_form a une fonction makeSound. -La classe Cat hérite de la classe Lifeform et redéfinit (remplace) la fonction makeSound. -De plus, la classe Cat a une fonction limitée, la fonction catPunch, que la classe parent n'a pas.

La classe Dog est utilisée dans les éléments suivants, "Veuillez modifier les spécifications". Il est fait de la même manière que la classe Cat, remplace makeSound et a une attaque de chien limitée à la classe Dog.

Description de la classe principale

Ce à quoi je veux que vous fassiez attention dans la classe principale life_form = new cat(); J'essaie.

Assigner une classe enfant à une classe parent. C'est un upcast.

Résultat d'exécution

Le résultat de l'exécution est le suivant. スクリーンショット 2018-07-01 10.40.21.png C'est un peu difficile à voir, mais vous pouvez voir que l'instance Cat makeSound () est appelée depuis life_form par upcasting. En d'autres termes, la substance de life_form après life_form = new Cat (); `` est une instance de Cat.

Merci d'avoir changé les spécifications

Maintenant, si vous êtes invité à changer l'instance Cat de ce programme en instance Dog, il vous suffit d'apporter les modifications suivantes.

life_form = new cat(); ->life_form = new Dog();

Si l'upcast n'existait pas en tant que fonctionnalité, les changements seraient:

1er life_form = new cat(); ->Dog dog = new Dog();

2e

life_form.makeSound();


->```dog.makeSound();```

 Tout d'abord, il est nécessaire de créer une instance avec le type Dog, et même là où il est utilisé, dog doit être utilisé.


 Vous pourriez penser que cela ne changerait pas grand chose.
 Mais c'est parce que c'est un très petit programme.
 Plus le développement est important, plus il y a de changements et plus de changements.

 Il est important de créer un programme résistant aux changements de spécifications. Et java a la capacité de le faire.
 Je veux bien l'utiliser.


Recommended Posts

Upcast (Java) qui peut réduire la quantité de changement lorsque la spécification est modifiée
[Rails] Lorsque le changement de disposition du dispositif n'est pas reflété
[Swift] Obtenez le moment où la valeur de textField est modifiée
Méthode d'enquête lorsque le processeur du serveur exécutant java est lourd
Cas où les utilisateurs sont déconnectés lors de la modification d'une application (rails)
Méthode de réglage qui ne change pas la taille même si le CSS est changé
[Java] Où est la classe d'implémentation de l'annotation qui existe dans BeanValidation?
L'ordre des modificateurs de méthode Java est fixe
Quand le survol d'Eclipse est difficile à voir
La comparaison d'énumération est ==, et equals est bonne [Java]
[Java] Lors de l'écriture du source ... Mémorandum ①
Modifier la qualité de stockage des images JPEG en Java
L'histoire que .java est également construite dans Unity 2018
La spécification d'autorisation de la méthode FileUtils est un nombre octal.
Passez en revue les connaissances de base du rubis souvent oubliées
L'idée de couper quand l'erreur n'est pas résolue
[Java] [Java EE] [Glassfish] (suite) Style qui met en doute le cache de Glassfish
Java: dont le problème est plus rapide, en flux ou en boucle
Comment résoudre le problème de non-sortie du journal de connexion lorsque l'application Web est arrêtée
Méthode de réglage qui ne change pas la taille même si le CSS est changé