比如 interface A
Class B implement A
这样的话类B实现了接口A中定义的方法.
可以通过 A a=new B()来实现,这样做跟直接实例化B(B b=new B())然后调用同样的方法,这样有什么区别吗?
如果效果是完全相同的,那么实现接口的意义何在呢?不过在编程中经常会发生类B本身不能实例化,但是通过接口却能调用方法.这个是什么原理呢?
我猜想类B可能是抽象类,那么抽象类又是怎么实现A a=new B()这个过程的呢?如果是被子类继承的,那么直接实例化它的子类不就结了吗?为什么还要用接口呢?

解决方案 »

  1.   

    这是一个多态的问题? A a=new B() 而B要重写A中的方法.声明一个A类型的引用变量指向B类型,
    a.method()是调用的B中重写的方法.
    若还有一个class c implement interface A 就可以用上面的a = new c();
    若是B b = new B();
    这样行吗?你现在应该知道了为什么用交类的也就是这里的interface A 了.看一下多态方面的东西.你就会明白的
      

  2.   

    其实接口就是一种抽象类!!!A a=new B()这个,其实是一个上转型对象,a可以直接操作B中的隐藏变量,或重写方法!!!但是a是不能直接操作在B类中新增加的变量或方法!!!!
    对于B b = new B();这个是不能实现上面这个效果的!!!!这样你就可以看得清楚两者的区别了吧!!!
    希望我的回答你可以满意!!!!
      

  3.   

    可以通过 A a=new B()来实现,这样做跟直接实例化B(B b=new B())然后调用同样的方法,这样有什么区别吗?
    ---------------
    其实是差不多的,看需要
    比如B除了实现A的接口方法外,有自己的方法,A a = new B(),这样a只是作为A,不能直接调用B自己的方法,加入a只需要调用A的接口方法那么两个是一样的。还有一个跟跟你提到的不太一样的面向接口编程思想:
    public void fun(A a){}//能接受A及所有实现A的子类
    public void fun(B b){}//只能接受B或者B的子类
    不过在编程中经常会发生类B本身不能实例化,但是通过接口却能调用方法.
    ----------
    能否举个例子?
    估计是楼主错误理解了,以为用接口返回就是实例化接口的过程,其实是实现接口的子类做的工作,只不过拿接口取接收他,就像你上面的A a = new B(),本来是B,拿A接受也没错,A是接口。。