java言語における以下のプログラムに関する質問です。書籍「java言語で学ぶデザインパターン入門」の第三章Template Methodに関するサンプルプログラムを簡略化したものです。
[質問]
Mainクラス中のStringDisplayクラスのインスタンス生成の際に
StringDisplay d2 = new StringDisplay("Hello, world.");
ではなく
AbstractDisplay d2 = new StringDisplay("Hello, world.");
とサンプルプログラムに記載されています。前者ではなく、後者のように記述するべき理由があるのでしょうか。
[追記]
質問したかった点は、一般にスーパークラス型の変数にサブクラスのインスタンスを代入するメリットは存在するのかということです。(該当書籍にはこのような記述は良いと述べられています。)
よろしくお願いいたします。
java
1abstract class AbstractDisplay { 2 public abstract void open(); 3 public abstract void print(); 4 public abstract void close(); 5 public final void display() { 6 open(); 7 for (int i = 0; i < 5; i++) { 8 print(); 9 } 10 close(); 11 } 12} 13 14class StringDisplay extends AbstractDisplay { 15 private String string; 16 private int width; 17 public StringDisplay(String string) { 18 this.string = string; 19 this.width = string.getBytes().length; 20 } 21 public void open() { 22 printLine(); 23 } 24 public void print() { 25 System.out.println("|" + string + "|"); 26 } 27 public void close() { 28 printLine(); 29 } 30 private void printLine() { 31 System.out.print("+"); 32 for (int i = 0; i < width; i++) { 33 System.out.print("-"); 34 } 35 System.out.println("+"); 36 } 37} 38 39public class Main { 40 public static void main(String[] args) { 41 StringDisplay d2 = new StringDisplay("Hello, world."); 42 AbstractDisplay d3 = new StringDisplay("こんにちは。"); 43 d2.display(); 44 d3.display(); 45 } 46} 47 48 49
回答2件
あなたの回答
tips
プレビュー