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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 史龙贤 黑马帝   /  2012-9-12 00:06  /  1708 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

<T ? extends comparable<? super T> >
;上面的代码到底表示什么意思?有什么作用呢?主要用在什么地方?
接口中的变量都是常量吗?接口跟抽象类有神马区别呢?为啥要分这两类?

评分

参与人数 1技术分 +1 收起 理由
田建 + 1

查看全部评分

3 个回复

倒序浏览
本帖最后由 王金科 于 2012-9-12 13:10 编辑

<T ? extends comparable<? super T> >
这个是泛型,这句话的意思是 这里使用的是T类型或者T的父类,并且还要是实现了comparable接口
泛型用于类型限定,提高安全性.
比如定义一个集合 List<String> list = new ArrayList<String>();
这里就限定ArrayLis里只能放String类型的数据.
不过泛型是给编译器看的,通过反射,还是可以往里面添加其他类型数据的.
接口中的变量都被final修饰,所以都是常量
抽象类就是为了不让该类被创建对象,抽象类里可以没有抽象方法,但是有抽象方法的类,一定是抽象类
接口,就是所有的方法都是抽象方法.
接口的出现,提高了java语言的扩展性,因为java只允许单继承(接口继承多个接口的特例除外),但是可以多实现,这样就大大的提高了扩展性.
一个类在继承另一个类的时候,还可以去实现其他多个接口

点评

ArrayList,注意修改!  发表于 2012-9-12 08:16

评分

参与人数 1技术分 +1 收起 理由
田建 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 张飞年 于 2012-9-12 02:58 编辑

     楼主的<T ? extends comparable<? super T> > 这个写法我觉得有问题,应该是这样的吧<T extends comparable<? super T> >或者T< ? extends comparable<? super T> > t;
(1)这里分开理解比较容易:
comparable<? super T> 这是泛型的下限,也就是说comparable的类型只接收T类型或者是T类型的父类类型,这里的?为通配符。下限通常在对集合中的元素进行取出操作时进行使用。
<? extends comp...>这是表示泛型的上限,也就是说当前对象只接收comp...类型或者它的子类类型。上限一般在存储元素的时候使用,因为这样取出都 是按照上限类型来运算的,不会出现类型安全隐患。
    可以看哈这个文章:http://blog.csdn.net/loudspeaker1987/article/details/6603372
===============================================================
(2)接口中对常量隐含 public final 的修饰,所在接口中的变量都 是常量。
===============================================================
(3)接口与抽象类的区别:含有abstract修饰符的class即为抽象类,abstract 类不能创建的实例对象。含有abstract方法的类必须定义为abstract class,abstract class类中的方法不必是抽象的。abstract class类中定义抽象方法必须在具体子类中实现,所以,不能有抽象构造方法或抽象静态方法。如果的子类没有实现抽象父类中的所有抽象方法,那么子类也必须定义为abstract类型。
  接口可以说成是抽象类的一种特例,接口中的所有方法都必须是抽象的。接口中的方法定义默认为public abstract类型,接口中的成员变量类型默认为public static final。
  两者的语法区别:
1.抽象类可以有构造方法,接口中不能有构造方法。
2.抽象类中可以有普通成员变量,接口中没有普通成员变量
3.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。
4. 抽象类中的抽象方法的访问类型可以是public,protected和(默认类型,虽然eclipse下不报错,但应该也不行),但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。
5. 抽象类中可以包含静态方法,接口中不能包含静态方法
6. 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型。
      两者的最大区分点就在于一个完全抽象,一个半抽象,上面忆经说的很具体 了。

评分

参与人数 1技术分 +1 收起 理由
田建 + 1

查看全部评分

回复 使用道具 举报
接口和继承其实最最本质的区别就在于  接口可以多继承  继承只能单继承(这是最核心的)  
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马