请教一下,关于override的方法返回类型并不是绝对相同,而是兼容这个。 
我试了一下,父类返回类型是子类返回类型时确实ok的,但是基本数据类型兼容这个没成功,不知道为何? 
这是代码: 
public class A {
  
public static void main(String[] args) {  
   
   B t =new C(); 
   t.test();

}class B {short test() {
    return (short)2;
}

class C extends B{ int test() {
   return (int)2;
}
}

解决方案 »

  1.   

    这个能编译通过?下面的还差不多
    public class Hello {
    public static void main(String[] args) {  
    B t =new C(); 
    t.test();

    }class B {
    int test() {
         return (short)2;
    }

    class C extends B{ 
    int test() {
    return (int)2;
    }
    }
      

  2.   


    short与int之间没有子父类间的关系
      

  3.   


    如ZangXT所说,改写方法的返回值必须是继承关系。
    基本数据类型之间没有继承关系,所以不能象楼主那样操作。但是可利用Number类与Integer类的继承关系,同时利用JDK5.0的自动装箱功能。如:public class A{
        public static void main(String[] args) {
            short s = new B().test().shortValue();
            int i = new C().test();
        }
    }public class B {
        public Number test() {
            return (short)2;
        }
    }public class C extends B{
        public Integer test() {
            return (int)2;        
        }
    }
      

  4.   

    重写的方法返回值必须要相同 才能覆盖! 这个是基本的定义,谁也否定不了!
    然后看下  下面的程序:class A {
        public Object fun() {
            return null;
        }
    }
    class B extends A {
        public String fun() {
            return null;
        }
    }这个为什么能运行呢! 因为String继承自Object类!
    这时有人会问:这个返回值类型也不同啊?不是和上面定义的矛盾吗?
    其实并不矛盾,因为String继承自Object,所以String就是Object类型的;
    就像是 正方形继承自长方形,能说正方形不是长方形吗?是把?
    对于String继承自Object这句话有问题的,可以去看JDK文档;
      

  5.   

     B t =new C(); 
     要想实现多态必须满足三个条件。1.
      继承
    2.
      重写
    3.
      父类的指针指向子类的对象
      

  6.   

    代码没问题啊?
    public class Hello {
      public static void main(String[] args) {
        B t = new C();
        System.out.println(t.test());
      }
    }class B {
      int test() {
        return (short) 1;
      }
    }class C extends B {
      int test() {
        return (int) 2;
      }
    }
    运行结果为2
      

  7.   

    这个提问涉级数据类型自动转换和方法重载中返回类型限制问题。
    重写必须具有相同的返回类型。(但是这要看你使用的jdk版本,因为从java5 起返回类型可以是子类型--称为协变式返回)
    但是你使用的是基本类型。所以必须相同。
    把基本类型变成包装类就好了。