为什么子类中覆盖超类的方法的返回类型必须与超类兼容? 谢谢!

解决方案 »

  1.   

    这个就是面向对象的特征中多态性的表现.建议去看下Overload和Override的区别.方法的重写(你说的覆盖)Overriding:如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被"屏蔽"了。这个其实是规定.
      

  2.   

    这就是继承中的对父类的重写:
      它的英文是(override),只是对方法体的重写而重写的 方法的特征 (即:方法的类型\名称\参数列表)都必须与父类中那个方法一致,那么如果返回的值的类型与父类不兼容也就是与重写后的方法的类型不同,就不能通过编译了.
      

  3.   

    提示:从jdk 5.0 开始,override 父类的方法,允许不同的返回类型,不过参数必须相同。
      

  4.   

    覆写(Override)和重载(Overload)的比较其实很本质的区别就是看函数特征:覆写(Override)的两个函数的函数特征相同,重载(Overload)的两个函数的函数名虽然相同,但函数特征不同。 
    函数特征包括函数名,参数的类型和个数。 
    Override 是在继承的时候,如果你写的函数与要继承的函数函数特征相同,那么,加上这个关键字,在使用这个子类的这个函数的时候就看不见父类(或超类)的函数了,它被覆盖掉了。 
    比如:Derived继承了Base,Base里面有void A(int a) 
    那么如果你Derived里面觉得A写得不好或不适合这个类,你想重新再写一遍A里的代码,那么就写override void A(int a)这样,原来的那个函数就被你新写的这个覆盖掉了。 
    Overload 是重载,就是说函数名相同,函数特征不同,系统会根据你提供的参数来调相应的函数。 
    比如:void A(int a)和void A(int a,int b) 
    如果你用的是A(1)那么调的是第一个,如果是A(1,1)那么调的是第二个。