您现在的位置是:首页 >

多形性肿瘤什么意思 多形性的覆蓋与过载

火烧 2021-06-18 08:07:24 1025
多形性的覆蓋与过载   现在让我们用不同的眼光来看看本章的头一个例子 在下面这个程序中 方法 lay 的接口会在被覆蓋的过程中发生变化 这意味着我们实际并没有 覆蓋 方法 而是使其 过载 编译器允许我

多形性的覆蓋与过载  

多形性肿瘤什么意思 多形性的覆蓋与过载
  现在让我们用不同的眼光来看看本章的头一个例子 在下面这个程序中 方法play()的接口会在被覆蓋的过程中发生变化 这意味着我们实际并没有 覆蓋 方法 而是使其 过载 编译器允许我们对方法进行过载处理 使其不报告出错 但这种行为可能并不是我们所希望的 下面是这个例子     //: WindError java   // Accidentally changing the interface    class NoteX {   public static final int    MIDDLE_C = C_SHARP = C_FLAT = ;  }    class InstrumentX {   public void play(int NoteX) {    System out println( InstrumentX play() );   }  }    class WindX extends InstrumentX {   // OOPS! Changes the method interface:   public void play(NoteX n) {    System out println( WindX play(NoteX n) );   }  }    public class WindError {   public static void tune(InstrumentX i) {    //     i play(NoteX MIDDLE_C);   }   public static void main(String[] args) {    WindX flute = new WindX();    tune(flute); // Not the desired behavior!   }  } ///:~    这里还向大家引入了另一个易于混淆的概念 在InstrumentX中 play()方法采用了一个int(整数)数值 它的标识符是NoteX 也就是说 即使NoteX是一个类名 也可以把它作为一个标识符使用 编译器不会报告出错 但在WindX中 play()采用一个NoteX句柄 它有一个标识符n 即便我们使用 play(NoteX NoteX) 编译器也不会报告错误 这样一来 看起来就象是程序员有意覆蓋play()的功能 但对方法的类型定义却稍微有些不确切 然而 编译器此时假定的是程序员有意进行 过载 而非 覆蓋 请仔细体会这两个术语的区别 过载 是指同一样东西在不同的地方具有多种含义 而 覆蓋 是指它随时随地都只有一种含义 只是原先的含义完全被后来的含义取代了 请注意如果遵守标准的Java命名规范 自变量标识符就应该是noteX 这样可把它与类名区分开     在tune中 InstrumentX i 会发出play()消息 同时将某个NoteX成员作为自变量使用(MIDDLE_C) 由于NoteX包含了int定义 过载的play()方法的int版本会得到调用 同时由于它尚未被 覆蓋 所以会使用基础类版本     输出是     InstrumentX play() lishixinzhi/Article/program/Java/JSP/201311/19231  
永远跟党走
  • 如果你觉得本站很棒,可以通过扫码支付打赏哦!

    • 微信收款码
    • 支付宝收款码