public class generics {
public static void main(String[] args) {
Student<String> s1 = new Student<>("jack", "优秀");
Student<Double> s2 = new Student<>("Tom", 95.0);
Student<Character> s3 = new Student<>("Bob", 'A');
Student[] students = new Student[3];
students[0] = s1;
students[1] = s2;
students[2] = s3;
}
}
class Student<T> {
private String name;
private T score;
public Student(String name, T score) {
this.name = name;
this.score = score;
}
}
为什么students数组可以存不同的类型呢?students是被声明成Student类型的数组了吗,这是多态吗,Student<String>、Student<Double>、Student<Character> 都是Student的子类?
如果代码写成:
Student<Object>[] students = new Student[3];
students[0] = s1;
students[1] = s2;
students[2] = s3;
就直接报错了,包括下面这句代码:
Student<String> s1 = new Student<>("jack", "优秀");
Student s = s1;//不会报错
Student<Object> s = s1;//报错
不写类型不是默认Object类型吗,为什么两句话一个报错一个不报错呢。