知识大全 为什么要上溯造型
Posted 自变量
篇首语:其实最美好的日子就是,我对你闹,你对我笑。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 为什么要上溯造型相关的知识,希望对你有一定的参考价值。
这个程序看起来也许显得有些奇怪 为什么所有人都应该有意忘记一个对象的类型呢?进行上溯造型时 就可能产生这方面的疑惑 而且如果让tune()简单地取得一个Wind句柄 将其作为自己的自变量使用 似乎会更加简单 直观得多 但要注意 假如那样做 就需为系统内Instrument的每种类型写一个全新的tune() 假设按照前面的推论 加入Stringed(弦乐)和Brass(铜管)这两种Instrument(乐器) //: Music java // Overloading instead of upcasting class Note private int value; private Note (int val) value = val; public static final Note middleC = new Note ( ) cSharp = new Note ( ) cFlat = new Note ( ); // Etc class Instrument public void play(Note n) System out println( Instrument play() ); class Wind extends Instrument public void play(Note n) System out println( Wind play() ); class Stringed extends Instrument public void play(Note n) System out println( Stringed play() ); class Brass extends Instrument public void play(Note n) System out println( Brass play() ); public class Music public static void tune(Wind i) i play(Note middleC); public static void tune(Stringed i) i play(Note middleC); public static void tune(Brass i) i play(Note middleC); public static void main(String[] args) Wind flute = new Wind (); Stringed violin = new Stringed (); Brass frenchHorn = new Brass (); tune(flute); // No upcasting tune(violin); tune(frenchHorn); ///:~ 这样做当然行得通 但却存在一个极大的弊端 必须为每种新增的Instrument 类编写与类紧密相关的方法 这意味着第一次就要求多得多的编程量 以后 假如想添加一个象tune()那样的新方法或者为Instrument添加一个新类型 仍然需要进行大量编码工作 此外 即使忘记对自己的某个方法进行过载设置 编译器也不会提示任何错误 这样一来 类型的整个操作过程就显得极难管理 有失控的危险 但假如只写一个方法 将基础类作为自变量或参数使用 而不是使用那些特定的衍生类 岂不是会简单得多?也就是说 如果我们能不顾衍生类 只让自己的代码与基础类打交道 那么省下的工作量将是难以估计的 这正是 多形性 大显身手的地方 然而 大多数程序员(特别是有程序化编程背景的)对于多形性的工作原理仍然显得有些生疏 cha138/Article/program/Java/JSP/201311/19474相关参考