回答編集履歴

3

追記

2018/02/05 02:50

投稿

momon-ga
momon-ga

スコア4820

test CHANGED
@@ -1,6 +1,6 @@
1
1
  まず2つあります。
2
2
 
3
- - そもそもフィールドは~~継承~~オーバーライドされない。
3
+ - そもそもフィールドはオーバーライドされない。
4
4
 
5
5
  - 親クラス(Player)から子クラス(Hero)のフィールドを参照することはできない
6
6
 
@@ -17,6 +17,8 @@
17
17
  同名のフィールドを子クラスで定義した場合、親クラス、子クラスでそれぞれ同名のフィールドを持っています。
18
18
 
19
19
  ですので、子クラス側で親クラスのフィールドに値を設定したつもりでも、子クラス側に設定されます。
20
+
21
+ 継承自体されますが、他のクラスから参照できるかは、可視性によります。
20
22
 
21
23
 
22
24
 

2

追記

2018/02/05 02:50

投稿

momon-ga
momon-ga

スコア4820

test CHANGED
@@ -10,8 +10,6 @@
10
10
 
11
11
 
12
12
 
13
- --
14
-
15
13
  追記
16
14
 
17
15
  「継承されない」は、間違いでは?については、その通りです。
@@ -20,15 +18,17 @@
20
18
 
21
19
  ですので、子クラス側で親クラスのフィールドに値を設定したつもりでも、子クラス側に設定されます。
22
20
 
23
- ---
24
-
25
21
 
26
22
 
27
23
  対応としては、いくつかありますが。
28
24
 
29
25
 
30
26
 
27
+ 前提としては、子クラス側のフィールドは削除します。
28
+
29
+
30
+
31
- 0. YamakawaJunichiさんの言うとおり、子クラス側のフィールドを削除して、親クラスの値を変更する
31
+ 0. YamakawaJunichiさんの言うとおり、子クラス側から親クラスの値を直接変更する
32
32
 
33
33
  0. 乱数設定の部分をPlayerのコンストラクタに実装する
34
34
 
@@ -46,7 +46,7 @@
46
46
 
47
47
 
48
48
 
49
- 子クラスから呼べるセッターを用意するっていうのが、上記1の方法とほぼ同じです。
49
+ 子クラスから呼べるセッターを用意する場合、上記1の方法とほぼ同じです。
50
50
 
51
51
  セッターで値を変更できるようにしたくないなら、2と3両方コンストラクタを用意すれば、
52
52
 

1

継承とオーバーライドをミスったので修正

2018/02/05 02:46

投稿

momon-ga
momon-ga

スコア4820

test CHANGED
@@ -1,12 +1,26 @@
1
1
  まず2つあります。
2
2
 
3
- - そもそもフィールドは継承されない。
3
+ - そもそもフィールドは~~継承~~オーバーライドされない。
4
4
 
5
5
  - 親クラス(Player)から子クラス(Hero)のフィールドを参照することはできない
6
6
 
7
7
 
8
8
 
9
9
  PlayerクラスのgetParameterはHeroクラスの値を見ることはないので、初期値のままとなります。
10
+
11
+
12
+
13
+ --
14
+
15
+ 追記
16
+
17
+ 「継承されない」は、間違いでは?については、その通りです。
18
+
19
+ 同名のフィールドを子クラスで定義した場合、親クラス、子クラスでそれぞれ同名のフィールドを持っています。
20
+
21
+ ですので、子クラス側で親クラスのフィールドに値を設定したつもりでも、子クラス側に設定されます。
22
+
23
+ ---
10
24
 
11
25
 
12
26