服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

名字的隐藏


  只有c++程序员可能才会惊讶于名字的隐藏,因为它的工作原理与在c++里是完全不同的。如果java基础类有一个方法名被“过载”使用多次,在衍生类里对那个方法名的重新定义就不会隐藏任何基础类的版本。所以无论方法在这一级还是在一个基础类中定义,过载都会生效:
  
  //: hide.java
  // overloading a base-class method name
  // in a derived class does not hide the
  // base-class versions
  
  class homer {
   char doh(char c) {
    system.out.println("doh(char)");
    return 'd';
   }
   float doh(float f) {
    system.out.println("doh(float)");
    return 1.0f;
   }
  }
  
  class milhouse {}
  
  class bart extends homer {
   void doh(milhouse m) {}
  }
  
  class hide {
   public static void main(string[] args) {
    bart b = new bart();
    b.doh(1); // doh(float) used
    b.doh('x');
    b.doh(1.0f);
    b.doh(new milhouse());
   }
  } ///:~
  
  正如下一章会讲到的那样,很少会用与基础类里完全一致的签名和返回类型来覆盖同名的方法,否则会使人感到迷惑(这正是c++不允许那样做的原因,所以能够防止产生一些不必要的错误)。

扫描关注微信公众号