1

私はうまくコンパイルするこのようなことをしようとしています:

public interface Training {
    public void train();
}

public class JavaTraining implements Training{

    @Override
    public void train() {
        // TODO Auto-generated method stub

    }


}

import java.util.*;

public class TestClass {

    /**
     * @param args
     */
    public static void main(String[] args) {
        List<Training> trainingList = new ArrayList<Training>();
        trainingList.add(new JavaTraining());
        for(Training trainingItem : trainingList){
            trainingItem.train();
        }

    }

}

これは正常にコンパイルされ、実行されます。

しかし、以下のように main メソッドを変更しようとすると、コンパイル時にエラーが発生します。

何故ですか?

import java.util.*;

public class TestClass {

    /**
     * @param args
     */
    public static void main(String[] args) {
        List<Training> trainingList = new ArrayList<JavaTraining>();
    }

}

コンパイル時エラーは次のとおりです。

「型の不一致: ArrayList から List に変換できません」

ここで1 つの投稿を読みました。しかし、それは私の疑いをクリアしません。

私はどこにも使用していないので、質問はこれの複製ではありません

List<? extends Training>

しかし、それでも JavaTraining のオブジェクトを受け入れています。どのように?

4

2 に答える 2