質問するログイン新規登録

回答編集履歴

2

追記

2021/09/02 16:17

投稿

quickquip
quickquip

スコア11353

answer CHANGED
@@ -8,4 +8,24 @@
8
8
  > 継承したdisplayメソッドを呼び出すことができる。
9
9
  > 実際の動作は個々のクラスCharDisplayやStringDisplayで定まる。
10
10
 
11
- と書いてありませんか?
11
+ と書いてありませんか?
12
+
13
+ ----
14
+
15
+ `AbstractDisplay`が提供しているメソッド群で処理を組みたてる時には
16
+
17
+ ```java
18
+ AbstractDisplay d = new StringDisplay("Hello, world.");
19
+ ```
20
+ と宣言すれば`AbstractDisplay`が提供するメソッドだけを使っていることが**保証されます**。
21
+ そうすれば、サブクラスをnewする部分**だけを置き換える**ことで、`AbstractDisplay`を継承する別の実装に**(以降の処理には手を加えずに)切り替えられることが保証できます**。
22
+
23
+ ----
24
+
25
+ ```java
26
+ StringDisplay d = new StringDisplay("Hello, world.");
27
+ ```
28
+ と宣言した時、コードを書いていく最中に`StringDisplay`の内部実装にあたるメソッドを呼んでしまったら、`AbstractDisplay`を継承する別の実装に(以降の処理には手を加えずに)**切り替えられることが保証できません**。
29
+ これでは抽象クラスを上位クラスとして定義するメリットを享受していません。
30
+
31
+ 抽象クラスを使う時には抽象クラスをわざわざ宣言するメリットを享受したいです。

1

追記

2021/09/02 16:17

投稿

quickquip
quickquip

スコア11353

answer CHANGED
@@ -1,3 +1,11 @@
1
1
  > 前者ではなく、後者のように記述するべき理由があるのでしょうか。
2
2
 
3
- そのように記載した時の動作を読者に示すためでしょう。
3
+ そのように記載した時の動作を読者に示すためでしょう。
4
+
5
+
6
+ ----
7
+ > d1,d2,d3とも、すべて同じAbstractDisplayのサブクラスのインスタンスだから、
8
+ > 継承したdisplayメソッドを呼び出すことができる。
9
+ > 実際の動作は個々のクラスCharDisplayやStringDisplayで定まる。
10
+
11
+ と書いてありませんか?