スーパークラスと同じコンストラクタが使えないのはなぜ?
Java初心者です。
import java.util.*;
class ListTest{
MyClass m1 = new MyClass("hoge");
MyClass m2 = new MyClass("fuga");
List<MyClass> list1 = new ArrayList<>(Arrays.asList(m1, m2)); //OK
ArrayList<MyClass> list2 = new ArrayList<MyClass>(Arrays.asList(m1, m2)); //OK
MyArrayList mylist = new MyArrayList(Arrays.asList(m1, m2)); //NG
}
class MyArrayList extends ArrayList<MyClass>{
// MyClassのListに対する処理
}
class MyClass{
MyClass(String s){}
}
このコードをコンパイルすると、
ListTest.java:9: エラー: クラス MyArrayListのコンストラクタ MyArrayListは指定された型に適用できません。
MyArrayList mylist = new MyArrayList(Arrays.asList(m1, m2)); //NG
^
期待値: 引数がありません
検出値: List<MyClass>
理由: 実引数リストと仮引数リストの長さが異なります
エラー1個
と言われてしまいます。
MyArrayList
はArrayList<MyClass>
を継承し、コンストラクタのオーバーロードもしていないのですが、なぜArrayList<MyClass>
と同じコンストラクタが使えないのでしょうか。
インタフェースについて何か初歩的なところで躓いている気はするのですがどこが悪いのかわかりません。
また、とりあえず
MyArrayList mylist = new MyArrayList();
mylist.addAll(Arrays.asList(m1,m2));
とすることでやりたかったことはできているのですが、そもそもこのArrayList
をextend
するやり方自体が変なやり方なのでしょうか?