例如:
ISampleInterface obj = new ImplementationClass();这样做有什么意义啊?

解决方案 »

  1.   

    实例化ImplementationClass类型,并不是什么实例化ISampleInterface。关于作用,就是多态。例如当有另外一个系统,例如叫做ImplementationClassVerion2的,是另外一种实现了ISampleInterface接口的,用来在程序中替代ISampleInterface的时候,“仅仅需要修改一条实例化语句”,而以后的程序根本不需要修改!这是因为程序流程是针对ISampleInterface来设计的,而不是针对实现它的具体类型来设计的!抽象的ISampleInterface具有明确、不变的属性和功能。因此,只要切实遵循接口的含义规定,程序不论针对什么样的扩展子类修改,其逻辑流程、测试和维护程序都是不变的。
      

  2.   

    在程序中替代ISampleInterface的  -->  在程序中替代ImplementationClass的
      

  3.   

    谢谢你的回答。
    ISampleInterface obj是不是算定义了一个接口变量?
      

  4.   

    ISampleInterface obj是不是算定义了一个接口变量?
    ——————————————————————————————————————————
    不对,这个说法乱的可以。变量要么是一个值,要么是一个对象。没有什么接口变量这种东西。“ISampleInterface obj”这个定义说明obj不论是什么对象,它都具有ISampleInterface接口。并且编译器会在编译“给obj赋值的语句”的时候进行类型检查,检验类型是否具有此接口。如果类型匹配功能弱一点的编译器,其生成的语言(的可执行代码)也一定会在运行时检验类型是否具有此接口。obj将来是一个具体的类型的对象,不是什么 ISampleInterface 接口变量。接口根本无法实例化为对象。
      

  5.   

    另外这也不是“工厂”模式。工厂模式是这样的:芯片 p=电脑主板.短路的芯片();
    p.修理();这里,方法“短路的芯片”用于返回任何一个具体类型的芯片,“芯片”是一个父类(abstract或者不是)或者接口或者具体的类。当“短路的芯片”是“芯片”兼容的时候(IsAssignableFrom方法),经常把这个叫做“工厂”模式。注意,仅仅当“短路的芯片”返回的对象的类型“不确定”的时候,这时候才叫做实现了“工厂模式”。注意,不要轻易说“p的类型是芯片”。靠,当初刚刚接触类型系统的时候就学了这个基本写法,作为多态的一种应用场景。没想到倒让什么“工厂模式”小题大做占据了人们的眼球。
      

  6.   

    ISampleInterface obj是不是算定义了一个接口变量?
    姑且算对吧,但是怎么听起来这么别扭呢?一般称为实例。