龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > JAVA开发 >

名字的隐藏

时间:2009-12-23 15:42来源:未知 作者:admin 点击:
分享到:
只有C++程序员可能才会惊奇于名字的隐藏,因为它的工作原理与在C++里是完全不同的。假如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++不答应那样做的原因,所以能够防止产生一些不必要的错误)。
  
精彩图集

赞助商链接