读书人

变量声明为接口类型有什么好处!该怎

发布时间: 2012-04-08 14:38:30 作者: rapoo

变量声明为接口类型,有什么好处!!

Java code
//A实现IA接口public class A implements IA {  void m() {}}//A1继承Apublic class A1 extends A {  void aaaa1(){}}//A2继承Apublic class A2 extends A {  void aaaa2(){}}//包含有A1、A2这些IA的实现类的一个包租婆类public class BaoZuPo {  private IA a1;  private IA a2;  ……  //get set 方法略}//经常遇到的情况:public class Test {   void test() {     A1 a1 = (A1)BaoZuPo.getA1();     a1.aaaa1();   //类似的    A2 a2 = (A2)BaoZuPo.getA2();    a2.aaaa2();  }}

我对接口的简单印象是:方便更换不同的实现。。。仅此而已
但与以上test里的代码联系不起来,那个test里,倒是一次次地把接口类型强转为真实类型,然后调用真实类型独有的方法,早知道这样,那个包租婆类里,a1、a2就声明为真实类型不就好了吗,省得强转了啊?它非声明为接口类型,意义在哪里?
求解惑……

[解决办法]
你这段代码体现不出接口的意义,因为没有用到接口的(共同)方法,只是调用不同子类的自己的方法
看看以下这段代码的区别
Java code
//A实现IA接口public class A implements IA {    void m() {}}//A1继承Apublic class A1 extends A {    void aaaa1(){}}//A2继承Apublic class A2 extends A {    void aaaa2(){}}//包含有A1、A2这些IA的实现类的一个包租婆类public class BaoZuPo {    private IA a1;    private IA a2;    ……    //get set 方法略}//经常遇到的情况:public class Test {    void test() {        IA a1 = BaoZuPo.getA1();        a1.m(); //这里才是意义所在        ((A1)a1).aaaa1(); //这里是调用子类自己的方法,体现不出意义        //类似的        IA a2 = BaoZuPo.getA2();        a2.m(); //这里才是意义所谓        ((A2)a2).aaaa2(); //这里是调用子类自己的方法,体现不出意义    }} 

读书人网 >J2SE开发

热点推荐