问题:可以定义与父类方法名相同,参数相同,返回值类型不同的方法吗? 例如:
父类中有个方法: public void open(){...}
子类中可以定义方法: public int open(){...} 吗?为什么?

解决方案 »

  1.   

    1、覆盖的方法的标志必须要和被覆盖的方法的标志完全匹配,才能达到覆盖的效果; 
    2、覆盖的方法的返回值必须和被覆盖的方法的返回一致; 
    3、覆盖的方法所抛出的异常必须和被覆盖方法的所抛出的异常一致,或者是其子类; 
    4、被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。
      

  2.   

    jdk 5以后对方法覆写(override) 增加了一个covariant return types 的特性,这个特性是说 如果子类中override的方法可以返回与父类方法不同的类型,但是返回的类型必须是父类方法返回类型的子类。比如
    父类中 Parent function(){....}
    子类中 Child function() {....}
    这样也算是覆写。
      

  3.   

    可以,你这个叫重写,不叫覆盖。
    Java隐没了virtual这个关键字,在C++里面可以指定这个关键字来达到区分覆盖和重写的差别。
    但是JVM里面的字节码有invokevirtual这个指令的。
      

  4.   

    肯定不行啊,覆盖要求签名一致的。这个是覆盖并非重载。
    _________________
    欢迎到我在技术圈的Java圈子做客: Java Guru