回答編集履歴

4

誤字修正

2017/03/17 05:11

投稿

akabee
akabee

スコア1947

test CHANGED
@@ -1 +1,33 @@
1
+ list.add(new BBB());
2
+
3
+
4
+
1
- ※申訳ございませんが回答が誤っていたため削除しした
5
+ 上記コードはlistに対BBB型を格納しようとしていま
6
+
7
+ 一方、宣言時にはnew List<? extends BBB>()と宣言しており、この宣言ではListの型としてBBB型を継承した?型を指定しています。
8
+
9
+
10
+
11
+ List1の要素の型には?型が指定されていますので、BBB型は指定できません。?型はBBB型を継承した?型であり、BBB型ではありません。
12
+
13
+
14
+
15
+
16
+
17
+ 具体例で考えます。Humanクラスを継承したDancerクラスがあるとします。Dancerクラスは、Humanクラスのプロパティ(年齢)やメソッド(食べる、寝る)に加えて、異なるプロパティ(専門ダンス:バレエ、ブレイク)やメソッド(踊る)を持っているとします。
18
+
19
+ List<Dancer>()と宣言した場合、HumanはDancerで追加されたプロパティやメソッドは持っていませんので、格納できるとすると問題があります。
20
+
21
+ List(0)にDancer型、List(1)にHuman型を格納したとします。その場合、List(0)は踊ることができ、List(1)は踊ることができないことになります。Humanは踊るというメソッドを持っていませんので。
22
+
23
+ よって両者を混在させるわけにはいかず、コンパイル時にエラーにしてくれています。Human型とDancer型は異なるものであるということです。
24
+
25
+
26
+
27
+ 逆に、DancerクラスはHumanクラスを継承しており、Humanクラスの持つプロパティやメソッドを持っていますので、Human型に対してはDancer型を代入することができます。
28
+
29
+ ただしこれも暗黙的型変換の結果として可能になっている処理であり、個人的には可読性の観点からあまり使ったことのある書き方ではありません。
30
+
31
+
32
+
33
+ [参考になるかも](http://msugai.fc2web.com/java/sub2sup.html)

3

削除しました

2017/03/17 05:11

投稿

akabee
akabee

スコア1947

test CHANGED
@@ -1,33 +1 @@
1
- list.add(new BBB());
2
-
3
-
4
-
5
- 上記コードはlistに対BBB型を格納しようとしていま
1
+ ※申訳ございませんが回答が誤っていたため削除しした
6
-
7
- 一方、宣言時にはnew List<? extends BBB>()と宣言しており、この宣言ではListの型としてBBB型を継承した?型を指定しています。
8
-
9
-
10
-
11
- List1の要素の型には?型が指定されていますので、BBB型は指定できません。?型はBBB型を継承した?型であり、BBB型ではありません。
12
-
13
-
14
-
15
-
16
-
17
- 具体例で考えます。Humanクラスを継承したDancerクラスがあるとします。Dancerクラスは、Humanクラスのプロパティ(年齢)やメソッド(食べる、寝る)に加えて、異なるプロパティ(専門ダンス:バレエ、ブレイク)やメソッド(踊る)を持っているとします。
18
-
19
- List<Human>()と宣言した場合、HumanはDancerで追加されたプロパティやメソッドは持っていません。
20
-
21
- もし格納できたとして、List(0)は踊ることができ、List(1)は踊ることができないのはおかしい。
22
-
23
- よって両者を混在させるわけにはいかず、コンパイル時にエラーにしてくれています。Human型とDancer型は異なるものであるということです。
24
-
25
-
26
-
27
- 逆に、DancerクラスはHumanクラスを継承しており、Humanクラスの持つプロパティやメソッドを持っていますので、Dancer型に対してはHuman型を代入することができます。
28
-
29
- ただしこれも暗黙的型変換の結果として可能になっている処理であり、個人的には可読性の観点からあまり使ったことのある書き方ではありません。
30
-
31
-
32
-
33
- [参考になるかも](http://msugai.fc2web.com/java/sub2sup.html)

2

誤字修正

2017/03/17 05:08

投稿

akabee
akabee

スコア1947

test CHANGED
@@ -24,7 +24,7 @@
24
24
 
25
25
 
26
26
 
27
- 逆に、DancerクラスはHumanクラスを継承しており、Humanクラスの持つプロパティやメソッドを持っていますので、Human型に対してDancer型を代入することができます。
27
+ 逆に、DancerクラスはHumanクラスを継承しており、Humanクラスの持つプロパティやメソッドを持っていますので、Dancer型に対してはHuman型を代入することができます。
28
28
 
29
29
  ただしこれも暗黙的型変換の結果として可能になっている処理であり、個人的には可読性の観点からあまり使ったことのある書き方ではありません。
30
30
 

1

誤字修正

2017/03/17 05:06

投稿

akabee
akabee

スコア1947

test CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  上記コードはlistに対しBBB型を格納しようとしています。
6
6
 
7
- 一方、宣言時にはnew List<? extends BBB>()と宣言しており、この宣言ではListのとしてBBB型を継承した?型を指定しています。
7
+ 一方、宣言時にはnew List<? extends BBB>()と宣言しており、この宣言ではListのとしてBBB型を継承した?型を指定しています。
8
8
 
9
9
 
10
10