Java里面Override的返回值是否必须和父类相同?
2009-06-15 06:20
225 查看
我们看一下如下的程序代码Test.java
这段代码到底对不对呢?能否编译通过呢?
在JDK5.0以前,Override要求参数列表和返回值必须完全相同,否则编译不通过,所以在jdk 1.3、 1.4里面,这个代码是错误的。 Test里面的newInstance 的返回值必须修改为为父类完全相同的Base才可以。
而在JDK1.5以后,系统允许返回值和父类不同了,但必须是其子类才可以。这个问题我也是在实际编程时才注意到的。
当然,目前的大部分书籍还是老版本的,如果对大家产生了什么疑问,那么自己写一个代码亲自验证一下才是正确的。书籍里的知识有一些随着时间的流逝,肯定会过时的。
class Base { public Base newInstance() { return new Base(); } public Base newInstance2() { return new Base(); } } class Test extends Base { // 返回值不同 public Test newInstance() { return new Test(); } // 返回值相同 public Base newInstance2() { return new Test(); } }
这段代码到底对不对呢?能否编译通过呢?
在JDK5.0以前,Override要求参数列表和返回值必须完全相同,否则编译不通过,所以在jdk 1.3、 1.4里面,这个代码是错误的。 Test里面的newInstance 的返回值必须修改为为父类完全相同的Base才可以。
而在JDK1.5以后,系统允许返回值和父类不同了,但必须是其子类才可以。这个问题我也是在实际编程时才注意到的。
当然,目前的大部分书籍还是老版本的,如果对大家产生了什么疑问,那么自己写一个代码亲自验证一下才是正确的。书籍里的知识有一些随着时间的流逝,肯定会过时的。
相关文章推荐
- JAVA是否允许返回值类型不同的重载overload或覆盖override
- 【JAVA基础小问题】Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?
- java是否允许返回值类型不同的重载overload或者覆盖override
- Java -- 子类使用super调用父类的方法A,A 调用了方法B,子类也override方法B,那么super.A()最终调用到了子类的B方法
- java判断一个字符串对象是否在一个集合里面
- 比较两个数组元素是否相同,顺序可以不同,维数必须一样
- 关于java基础中,接口里面父类的对象指向子类的引用
- linux下移动或者复制文件覆盖相同文件夹时,文件夹里面的每个文件都提示是否覆盖
- Java--判断两个文件是否相同
- Java中子类是否可以继承父类的static变量和方法而呈现多态特性
- java 反射比较两个类型相同的对象 内部的变量是否相等
- ”static”关键字是什么意思?Java中是否可以覆盖(override)一个private或者是static的方法?
- 比较两个java.util.Date 的日期(年月日)是否相同(忽略时、分、秒)的多种方法
- java怎么判断两个Set 里的对象的值是否相同【两个set中的值是否相等】、java treeset和hashset如何判断元素是否相同【即对象是否完全相同;利用一个set去除重复元素】
- Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?
- java中子类继承父类时,是否继承构造函数
- 【Java 小实验】重写(覆写 Override)返回值类型能不能相同
- java基础学习之——子类重写(覆盖)父类的方法必须满足的条件
- Java判断两个二叉树是否相同
- java 判断两个文件是否相同