回答編集履歴
2
脱字を修正
test
CHANGED
@@ -28,5 +28,5 @@
|
|
28
28
|
}
|
29
29
|
```
|
30
30
|
などの一見外部からインスタンス生成することが不可能に思える設計であっても、メソッドの戻り値で単体のインスタンスを補足できてしまう可能性があるので、このケースを除外できません
|
31
|
-
```sealed```でパターンを絞れるは継承先を限定できるからであって、この修飾子特有の恩恵というわけではありません
|
31
|
+
```sealed```でパターンを絞れるのは継承先を限定できるからであって、この修飾子特有の恩恵というわけではありません
|
32
32
|
最も、その設計が難しいのでそれを簡易化する修飾子が提供されています
|
1
インデントを調整
test
CHANGED
@@ -6,14 +6,14 @@
|
|
6
6
|
Javaにおいて基底型単体のインスタンス生成を禁止する修飾子が```abstract```です
|
7
7
|
```java
|
8
8
|
sealed abstract class Charactor permits Hero,Wizard{
|
9
|
-
|
9
|
+
protected int hp=0;
|
10
10
|
|
11
|
-
|
11
|
+
public static void heal(Charactor target)
|
12
|
-
|
12
|
+
switch(target){
|
13
|
-
|
13
|
+
case Hero h ->{h.hp += 20;}
|
14
|
-
|
14
|
+
case Wizard w -> {w.hp += 5;}
|
15
|
-
|
15
|
+
}
|
16
|
-
|
16
|
+
}
|
17
17
|
}
|
18
18
|
```
|
19
19
|
これで```Charactor```だけが渡るケースを除外することができます
|
@@ -24,7 +24,7 @@
|
|
24
24
|
しかし例外を排除することは難しく、例えば
|
25
25
|
```java
|
26
26
|
sealed class Charactor permits Hero,Wizard{
|
27
|
-
|
27
|
+
protected Charactor(){}
|
28
28
|
}
|
29
29
|
```
|
30
30
|
などの一見外部からインスタンス生成することが不可能に思える設計であっても、メソッドの戻り値で単体のインスタンスを補足できてしまう可能性があるので、このケースを除外できません
|