找人聊聊---java的接口技术。

qxjavajava 2002-07-22 12:30:53
如果两给类是紧耦合的(就是这两个类互相调用,不可分割),如果想让他们两个变成松耦合,可以让他们分别实现一个接口,。。。。。
可我不理解的是这个接口到底起了什么作用。两个类分别实现了借口和,他的方法。那岂不是只是告诉类该干什么,却让他自己实现,多麻烦呀。
在说,这两个类是如何联系起来的?
...全文
97 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
combot 2002-09-12
  • 打赏
  • 举报
回复
最新体会,MS的COM就相当于java的interface!
MS自己搞了一个不伦不类的VB,还要和C++集成起来,所以它的组件重用只能是在binary一级。
可见java是多么优秀的语言。
真没有必要去研究什么COM, MS自己也觉得不好意思,赶紧改.net。
coinagemule 2002-09-12
  • 打赏
  • 举报
回复
gz
zgpp 2002-08-20
  • 打赏
  • 举报
回复
这样,你可以更改A的具体实现,而不必改动B的调用代码。不过在B中要这样写:

c = new A();
使c的运行期类型是A
zgpp 2002-08-20
  • 打赏
  • 举报
回复
就是这个样子的有些动西真的需要和人聊一聊.
学了java着么久接口还理解不好.....
改为带接口:
public interface C
{
public void w();
}
public A implements C
{
public void w(){...}
}
public B
{
protected C c
}

其实你这样该就不错呀!
lwowen 2002-08-15
  • 打赏
  • 举报
回复
问大家一个问题,我定写了一个接口,里面有static方法,编译时出错:modifier static now allowed here 。
是不是不能在接口中定义static方法啊。
walkcamel 2002-08-14
  • 打赏
  • 举报
回复
同意combot()的话,从某种程度上来说,接口也可以说是系统的通信协议。
另外,接口也可以看成是功能的风格,就好像menento模式中的宽窄接口的定义,就让不同的client具有不同的权限了。
qxjavajava 2002-07-27
  • 打赏
  • 举报
回复
up
qxjavajava 2002-07-25
  • 打赏
  • 举报
回复
to : t() Thanks 我需要的就是更深刻的理解,对书本上的东西的照般我个人人为
没有意义..过几天研究pattern时一定要来捧场,呵呵.

to combot() ."在我的感觉里接口并不能实现多少的代码重用,代码的重用主要体现在类的继承和组合上,跟借口并没有太多关系。"-------我想如果一个类可以独立的完成任务那么他就有被代码重用的条件..
我想我该好好的再看一看Thinking in Java了.
我一直人为java的接口是对java的单一继承的补充与进步.
把接口理解为协议-------很精彩,I see .thanks

to all my friend :我还有的疑问是:
如过用的是java自身的api的接口,那么实现他的若干个类也许可以没有关系.
但如过在你设计的程序内部,实现同一个你自己定义的接口的两个类之间一定存在这某种关系,----------我在思考这种关系.

combot 2002-07-25
  • 打赏
  • 举报
回复
没有很好地理解你的话,先在这里解释我对接口的认识:

接口也可以理解为协议。实现了接口,也就向其他类声明它支持这个协议,任何类可以按照这个协议和它交流。至于它如何实现协议,就是和接口无关。打个比方,一个人,它既是领导又是他领导的下级,它有两个接口1.对上级2.对下级。另一个人只有上级没有下级,他只实现上级接口。还有的人,比较正直,有上级,但不会拍马屁功能,也没有实现上级接口。这就是接口比继承灵活的地方,就象role assigned to a class.
另外,使用接口可以使classes hierarchy趋于扁平。但是如果classes体系非常之复杂,class 继承可能更适应。
t 2002-07-24
  • 打赏
  • 举报
回复
to qxjavajava(射手座):

这样A就可以变化而不受B的影响;同时B也可能因为C的不同实现而具有多态性。

如果以B为核心对象,可参考Bridge Pattern关于角色转变的描述。

如果以C为核心接口,可参考Adapter Pattern的Class level pattern的描述。

如果把B看成工厂,可以参考Factory/Abstract Factory Pattern。

如果把w()换作update(B b),可以参考Observer Pattern。

另:最后三种是面向对象里interface的三种经典运用——adapter, factory, message。

注:这些模式都是最基本的设计模式,在GoF的Design Pattern中有记载。

regards

T.
t 2002-07-24
  • 打赏
  • 举报
回复
to qxjavajava(射手座):

这样A就可以变化而不受B的影响;同时B也可能因为C的不同实现而具有多态性。

如果以B为核心对象,可参考Bridge Pattern关于角色转变的描述。

如果以C为核心接口,可参考Adapter Pattern的Class level pattern的描述。

如果把B看成工厂,可以参考Factory/Abstract Factory Pattern。

如果把w()换作update(B b),可以参考Observer Pattern。

另:最后三种是面向对象里interface的三种经典运用——adapter, factory, message。

注:这些模式都是最基本的设计模式,在GoF的Design Pattern中有记载。

regards

T.
zombieLi 2002-07-24
  • 打赏
  • 举报
回复
主要是你没有真正理解多态的意义,在编码中,她可以使多种对象公用代码。很简单的一个例子,我们编写一个弹奏乐器的程序,我们首先得实现该接口的play方法,而每一种乐器的编写者可以使不同的人,而我们在调用时可以不管他的各种实现,只要调用play这个接口方法,这样我们的系统便可以无限的扩充,如果出现了bug,我们只需要替换该部分的接口实现,其他的部分不需要改动。同样,如果我们需要扩充功能,则我们可以添加接口,然后在去做他的实现,原来的代码我们完全不需要改变。
在我的感觉里接口并不能实现多少的代码重用,代码的重用主要体现在类的继承和组合上,跟借口并没有太多关系。
一家之言而已
t 2002-07-24
  • 打赏
  • 举报
回复
to qxjavajava(射手座):

pattern本身并不能回答你的问题,但是它可以帮你理解的更深刻。

regards

T.
combot 2002-07-24
  • 打赏
  • 举报
回复
假设A有n种特性,每一种特性由一个接口来描述。再假设外部程序调用A每一种特性的次数一样。
那么,使用n个接口对使用一个接口(类引用)把对外部程序变动降到1/n。
当然,这是最理想的情况下(有完美的接口设计)。
如果只有两个class,没有必要使用接口,但是谁也不能保证将来不需要其他class介入。
qxjavajava 2002-07-24
  • 打赏
  • 举报
回复
to : t() 我没想到这个问题是设计模式中的.我回去会好好研究这本书的.我还没有买着本书.

to :: combot() 同过你的回复我想我理解了接口在代码维护和重用方面的作用,谢谢

我还有写不解的地方:如果类A通过实现接口来完成任务,那我是不是可以通过直接完善类A的功能来达到同样的目的.

我突然在想: 接口存在的做用除了在代码维护和重用方面的作用外,是不是还在暗示着实现他的类该按照什么模式去实现和发展着个类.类A是这样的那么类B干了些什么呢? 他存在的价值是什么?

walkcamel 2002-07-23
  • 打赏
  • 举报
回复
看《设计模式》,讨论的就是这些问题,主要是考虑以后程序修改起来方便的了
qxjavajava 2002-07-23
  • 打赏
  • 举报
回复
to zgpp(上帝忘记了我是他爸):
就是这两个类互相调用,不可分割---------
public class A
{
protected B b;
}
public class B
{
protected A a;
}
就是这个样子的有些动西真的需要和人聊一聊.
学了java着么久接口还理解不好.....
改为带接口:
public interface C
{
public void w();
}
public A implements C
{
public void w(){...}
}
public B
{
protected C c
}


to : walkcamel(虫子) 《设计模式》这是本书吧?

zgpp 2002-07-22
  • 打赏
  • 举报
回复
如果你定义了两个接口,然后分别定义了实现这两个接口的类,和直接定义两个类有什么不同呢?
不知道你说“就是这两个类互相调用,不可分割”是什么意思,不如你说详细点,或许我能给你一个思路。
superzrb 2002-07-22
  • 打赏
  • 举报
回复
gz
llsoft 2002-07-22
  • 打赏
  • 举报
回复
gz

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧