A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 韩新凯 中级黑马   /  2012-5-6 23:09  /  1511 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 韩新凯 于 2012-5-8 20:46 编辑

Student extends Person
<? extends E> : 可以接收E类型或者E的子类型。上限。
如果这里填入Student的话可不可以传入Person,为什么?
如果填入的是Person可不可以传入Student,为什么?

<? super E> : 可以接收E类型或者E的父类型。下限。
如果这里填入Student的话可不可以传入Person,为什么?
如果填入的是Person可不可以传入Student,为什么?


自己搞的差不多了,如果和我有一样疑问的朋友最好自己去试试。我就是自己最后试出来的。

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

7 个回复

倒序浏览
<? extends E>:如果这里填入Student的话可不可以传入Person,这里是不能传入Person的,这里要求传入的是学生,而你传入的是一个人,传入的这个人可能是一个工人,这是不行的。如果填入的是Person可不可以传入Student,这是可以的,这里要求传入的是一个人,而你传入的是一个学生,学生也是一个人,这是可以的,这里也是多态,相当于Person p = new Student().   
<? super E>这个的解释可以参照上面的解释

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报
可以
因为这样多的目的是为了让多个类可以用一个类中定义好的功能。
为什么呢?
因为这里应用了多态,只要你实现了父类中的方法功能,你就可以把子类作为参数传进去,但是在运行的时候是以子类为主
这实现了代码的复用,提高了代码的健壮性。
回复 使用道具 举报
胡生蒙 发表于 2012-5-6 23:19

class Comp implements Comparable<Person>{//<? super E>这里为什么可以传入学生?

        @Override
        public int compareTo(Person s) {
                // TODO Auto-generated method stub
                .......
                return 0;
        }
       
}
回复 使用道具 举报
class Comp implements Comparable<Person>{//<? super E>这里为什么可以传入学生?如果学生是继承了Person的话,是不能传入学生的啊
                                                                                  因为<? super E>限定的是Person及其父类啊


        @Override
        public int compareTo(Person s) {
                // TODO Auto-generated method stub
                .......
                return 0;
        }
        
}
回复 使用道具 举报
本帖最后由 韩新凯 于 2012-5-8 16:09 编辑
徐然 发表于 2012-5-8 13:15
class Comp implements Comparable{//


毕老师说是可以的:
package com.generic;
import java.util.Comparator;
import java.util.Iterator;
import java.util.TreeSet;
public class GenericDemo {
public static void main(String[] args) {
  TreeSet<Student> ts = new TreeSet<Student>(new Comp());
  ts.add(new Student("abc1"));
  ts.add(new Student("abc2"));
  ts.add(new Student("abc3"));
  Iterator<Student> it = ts.iterator();
  while (it.hasNext()) {
   Student stu = it.next();
   System.out.println(stu.getName());
  }
}
}
class Person {
private String name;
public Person(String name) {
  super();
  this.name = name;
}
public String getName() {
  return name;
}
public void setName(String name) {
  this.name = name;
}
}
class Student extends Person {
public Student(String name) {
  super(name);
  // TODO Auto-generated constructor stub
}
}
class Comp implements Comparator<Person> {
@Override
public int compare(Person o1, Person o2) {
  // TODO Auto-generated method stub
  return o1.getName().compareTo(o2.getName());
}
}
回复 使用道具 举报
非常感谢楼上几位朋友的回答,但是我还是不太明白。
回复 使用道具 举报
自己搞的差不多了,就这样吧。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马