Upcast (Java), das den Änderungsbetrag reduzieren kann, wenn die Spezifikation geändert wird

Über Upcast

Was ist ausgestoßen?

Upcast ist eine Funktion, mit der eine Unterklasse (untergeordnete Klasse) implizit als Oberklasse (übergeordnete Klasse) fungieren kann.

Was kann mit erreicht werden

In der Entwicklung sind Spezifikationsänderungen inhärent. Wenn Sie zum Zeitpunkt einer solchen Spezifikationsänderung ein Programm mit Upcast schreiben, können Sie das Umschreiben des Programms aufgrund der Änderung minimieren.

Lassen Sie mich Ihnen ein Beispiel aus dem Programm geben.

Quellcode

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


//Übergeordnete Klasse
public class Life_form{
  public void makeSound(){
    System.out.println("???");
  }
}

Cat.java


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

  public void catPunch(){
    System.out.println("Katzenbrot");
  }

}

Dog.java


//Es wird im Artikel "Bitte ändern Sie die Spezifikationen" verwendet.
public class Dog extends Life_form {
  @Override
  public void makeSound(){
    System.out.println("Kuhn!");
  }

  public void dogAttack(){
    System.out.println("Beißen");
  }
}

Beschreibung der Klassen Life_form und Cat

-Die Life_form-Klasse verfügt über eine makeSound-Funktion. -Die Cat-Klasse erbt die Lifeform-Klasse und definiert die makeSound-Funktion neu (überschreibt sie).

Die Hundeklasse wird in den folgenden Punkten verwendet: "Bitte ändern Sie die Spezifikationen". Es wird auf die gleiche Weise wie die Cat-Klasse erstellt, überschreibt makeSound und hat einen Hundeangriff, der auf die Dog-Klasse beschränkt ist.

Beschreibung der Hauptklasse

Worauf Sie in der Hauptklasse achten sollen life_form = new cat(); Ich versuche.

Zuweisen einer untergeordneten Klasse zu einer übergeordneten Klasse. Dies ist ein Upcast.

Ausführungsergebnis

Das Ausführungsergebnis ist wie folgt. スクリーンショット 2018-07-01 10.40.21.png Es ist etwas schwer zu erkennen, aber Sie können sehen, dass die Cat-Instanz makeSound () durch Upcasting von life_form aufgerufen wird. Mit anderen Worten, der Körper von life_form nach `life_form = new Cat ();` ist eine Instanz von Cat.

Vielen Dank, dass Sie die Spezifikationen geändert haben

Wenn Sie nun aufgefordert werden, die Cat-Instanz dieses Programms in eine Dog-Instanz zu ändern, müssen Sie nur die folgenden Änderungen vornehmen.

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

Wenn der Upcast nicht als Feature vorhanden wäre, wären die Änderungen:

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

2 ..

life_form.makeSound();


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

 Zunächst muss eine Instanz mit dem Hundetyp erstellt werden, und selbst dort, wo sie verwendet wird, muss der Hund verwendet werden.


 Sie könnten denken, es würde sich nicht so viel ändern.
 Aber das liegt daran, dass es ein sehr kleines Programm ist.
 Je größer die Entwicklung, desto mehr Änderungen und desto mehr Änderungen.

 Es ist wichtig, ein Programm zu erstellen, das gegenüber Spezifikationsänderungen resistent ist. Und Java hat die Fähigkeit dazu.
 Ich möchte es gut nutzen.


Recommended Posts

Upcast (Java), das den Änderungsbetrag reduzieren kann, wenn die Spezifikation geändert wird
[Schienen] Wenn die Layoutänderung des Geräts nicht berücksichtigt wird
[Swift] Ermittelt das Timing, wenn der Wert von textField geändert wird
Untersuchungsmethode, wenn die CPU des Servers, auf dem Java ausgeführt wird, schwer ist
Fälle, in denen Benutzer beim Bearbeiten einer App abgemeldet sind (Rails)
Einstellungsmethode, die die Größe nicht ändert, auch wenn das CSS geändert wird
[Java] Wo befindet sich die Implementierungsklasse der Annotation, die in BeanValidation vorhanden ist?
Die Reihenfolge der Java-Methodenmodifikatoren ist festgelegt
Wenn der Schwebeflug von Eclipse schwer zu sehen ist
Der Vergleich von enum ist == und gleich ist gut [Java]
[Java] Beim Schreiben der Quelle ... Memorandum ①
Ändern Sie die Speicherqualität von JPEG-Bildern in Java
Die Geschichte, dass .java auch in Unity 2018 erstellt wurde
Die Berechtigungsspezifikation der FileUtils-Methode ist eine Oktalzahl.
Überprüfen Sie die Grundkenntnisse von Rubin, die oft vergessen werden
Die Idee, abzuschalten, wenn der Fehler nicht behoben ist
[Java] [Java EE] [Glassfish] (Fortsetzung) Stil, der den Cache von Glassfish bezweifelt
Java: Das Problem ist schneller, Stream oder Loop
So beheben Sie das Problem, dass beim Stoppen der Webanwendung kein Protokollierungsprotokoll ausgegeben wird
Einstellungsmethode, die die Größe nicht ändert, auch wenn das CSS geändert wird