日期:2014-05-20  浏览次数:20757 次

请教一个关于JAVA接口的疑惑
比如 interface   A
Class   B   implement   A
这样的话类B实现了接口A中定义的方法.
可以通过 A   a=new   B()来实现,这样做跟直接实例化B(B   b=new   B())然后调用同样的方法,这样有什么区别吗?
如果效果是完全相同的,那么实现接口的意义何在呢?

不过在编程中经常会发生类B本身不能实例化,但是通过接口却能调用方法.这个是什么原理呢?
我猜想类B可能是抽象类,那么抽象类又是怎么实现A   a=new   B()这个过程的呢?如果是被子类继承的,那么直接实例化它的子类不就结了吗?为什么还要用接口呢?

------解决方案--------------------
这是一个多态的问题?

 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 了.

看一下多态方面的东西.你就会明白的
------解决方案--------------------
其实接口就是一种抽象类!!!

A a=new B()这个,其实是一个上转型对象,a可以直接操作B中的隐藏变量,或重写方法!!!但是a是不能直接操作在B类中新增加的变量或方法!!!!
对于B b = new B();这个是不能实现上面这个效果的!!!!

这样你就可以看得清楚两者的区别了吧!!!
希望我的回答你可以满意!!!!
------解决方案--------------------
可以通过 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是接口。。
------解决方案--------------------
看看java编程思想吧
------解决方案--------------------
学习了
------解决方案--------------------
接口A中的方法必须在B中重写,因为接口只提供方法,没有实现。
然后就是多态问题。
------解决方案--------------------
多 态 其他没什么了