黑马程序员技术交流社区
标题:
各位亲看过来!关于? super E
[打印本页]
作者:
邵阳
时间:
2012-7-20 17:07
标题:
各位亲看过来!关于? super E
本帖最后由 邵阳 于 2012-7-20 18:19 编辑
写了一个程序:
import java.util.*;
class Demo
{
public static void main(String[]args)
{
ArrayList <Person>arr1=new ArrayList<Person>();
arr1.add(new Person("lisi1"));
arr1.add(new Person("lisi2"));
arr1.add(new Person("lisi3"));
arr1.add(new Person("lisi4"));
printColl(arr1);
ArrayList <Student>arr2=new ArrayList<Student>();
arr2.add(new Student("lisi--1"));
arr2.add(new Student("lisi--2"));
arr2.add(new Student("lisi--3"));
arr2.add(new Student("lisi--4"));
printColl(arr2);
}
public static void printColl(ArrayList<? super Student> arr)
{
Iterator<? super Student>it=arr.iterator();
while (it.hasNext())
{
System.out.println(it.next().getName());
}
}
}
class Person
{
private String name;
Person(String name)
{
this.name=name;
}
public String getName()
{
return name;
}
}
class Student extends Person
{
Student(String name)
{
super(name);
}
}
柑橘应该可以吧,不是可以接受子类及子类的父类吗?
怎么结果是
D:\java\zuoye\fanxing>javac d.java
d.java:298: 错误: 找不到符号
System.out.println(it.next().getName());
^
符号: 方法 getName()
位置: 类 Object
1 个错误
求解,并改正
作者:
王宝康
时间:
2012-7-20 17:32
首先看一下Collection<? super E> and Collection<?extends E>
<? super Student>的意思可以接收Student类型的所有父类型,Object是一切类的父类,看错误也可以看到,错误产生自Object类,查阅API知道Object类是没有getName()方法的,所以编译会出错,可以改成<? extends Person>,意思是可以接收继承自Person类的所有类型(包括父类类型的对象),Person类中有getName方法,编译就不会出错了。
作者:
王宝康
时间:
2012-7-20 17:41
另附上代码如下:
package collection;
import java.util.*;
/*
* Collection<? extends E>可以接收继承自Person类的所有类型(包括父类类型的对象)
* Collection<? super E>可以接收E类型的所有父类型(包括父类类型的对象)
* */
public class demo {
public static void main(String[] args) {
ArrayList<Person1> arr1 = new ArrayList<Person1>();
arr1.add(new Person1("lisi1"));
arr1.add(new Person1("lisi2"));
arr1.add(new Person1("lisi3"));
arr1.add(new Person1("lisi4"));
printColl(arr1);
ArrayList<Student> arr2 = new ArrayList<Student>();
arr2.add(new Student("lisi--1"));
arr2.add(new Student("lisi--2"));
arr2.add(new Student("lisi--3"));
arr2.add(new Student("lisi--4"));
printColl(arr2);
}
public static void printColl(ArrayList<? extends Person1> arr) {
Iterator<? extends Person1> it = arr.iterator();
while (it.hasNext()) {
System.out.println((it.next().getName()));
;
}
}
}
class Person1 {
private String name;
Person1(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
class Student extends Person1 {
Student(String name) {
super(name);
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2