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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 抽烟男孩 中级黑马   /  2013-9-11 19:17  /  1020 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 抽烟男孩 于 2013-9-11 22:33 编辑

我尝试用泛型参数重载类的方法,但是失败了!!!

  1. class A{
  2. public Character getNum(Character achar){
  3.   achar = 'A';
  4.   System.out.println("I am class A method");
  5.   return achar;
  6. }
  7. }
  8. class B<T> extends A{
  9. public T getNum(T t){
  10.   System.out.println("I am Class B method");
  11.   return t;
  12. }
  13. }
  14. public class Test1 {
  15. public static void main(String[] args)
  16.   {
  17.   B b = new B<Character>();
  18.   B<Integer> c = new B<Integer>();
  19.   b.getNum('d');
  20.   c.getNum(2);
  21.   }
  22. }
复制代码
  1. I am class A method//为什么调用的是Class A 的方法呢?这里不应该调用B的重载方法吗?
  2. I am Class B method
复制代码
问题
1,为什么b.getnum()调用的是Class A的方法?
2,希望大神可以详解Java 的 Bridge方法?


评分

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

查看全部评分

1 个回复

倒序浏览
1,首先明确 public T getNum(T t) 这个不是重写
        当T为Character对象时,会发生错误的重载形式
        当T为Character之外的对象时,正常运行
2,在高新技术中,老师有讲到用到泛型的时候1.5版本 和1.4版本 的兼容性
B b = new B<Character>();这么写并不是指定了B中的T一定为Character对象,
        只是说明了T可以为Character对象,同时也可以存入其他对象。
        所以 写b.getNum(true)等等不是字符对象的时候也是正确的
        只是,如果存入参数是字符对象的话,会优先使用明确了参数类型的方法(这个是我推测出来的结果)
B<Character> b = new B<Character> 这个表示只能存入字符对象,这个时候就会报重载错误,编译不通过

明确了上面两点,就清楚原因了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马