fantacyleo 发表于 2014-8-6 21:20
这跟ArrayList al = new ArrayList();不合法是一个道理,参见http://bbs.itheima.com/forum.php?mod=viewth ...
我觉得像这样:ArrayList<Person> al = new ArrayList<Student>();不合法是为了保证类型安全。
如果允许这样,我要往al里添加一个工人,运行不报错,但是出现了类型安全。
而Person[] ps = new Student[]就不会出现这样的问题。
因为数组本身持有元素的类型信息,所以像ps[0] = new Worker();就会报运行时异常。
你说的添加工人不存在类型安全问题,因为利用的是多态,父类引用指向子类对象,我给的链接里就举了个例子。但是ArrayList<Person> al = new ArrayList<Student>(); Person[] ps = new Student[]的问题与类型安全无关,与多态无关,是逻辑上就说不通,还拿我链接里的例子:让一个管学生的老师去管一个管中学生的老师。C#允许这样做,也不一定是你认为的原因,可能只是一个简化书写的语法糖。