当前位置: 首页 > 图文教程 > 认证考试 > java认证 > Java认证:Override的返回值问题

java认证
浅谈Java开发中的设计模式
Java基础教程:常见问题解答
写给在Java和.net中徘徊的新手
作为一个Java程序员 你应该会什么
在Java语言中如何使用This关键字
如何将各种数据库连接起来?
eclipse+myeclipse配置环境
使用ADO.NET Entity Framework构建数据访问层
Java面向对象设计的原则
程序员必读:JavaBean规范
Grails与遗留数据库
世上最昂贵的JS代码
用java编写1-6数字的main函数
详解Java内存机制(堆与栈)的分配
代码保镖:Java代码混淆器
junit单元测试使用方法
J2EE学习总结:思维方式和理念
Java5.0的元注解(meta-annotations)
java能否继续保持在开发领域的领导地位?
Java教程:如何使用Annotation

java认证 中的 Java认证:Override的返回值问题


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-04   浏览: 82 ::
收藏到网摘: n/a

  我们看一下如下的程序代码Test.java
  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();
  }
  }
  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以后,系统允许返回值和父类不同了,但必须是其子类才可以。这个问题我也是在实际编程时才注意到的。