私はうまくコンパイルするこのようなことをしようとしています:
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 のオブジェクトを受け入れています。どのように?