忽然有些不明白, JAVA中的 Interface 到底有什么用呢?

ttt 2002-12-25 08:58:09
以前写JAVA的时候也没想那么多,就怎么想怎么写就是了

可是前段时间又写了大概半年多的VB, 再回来写JAVA的时候,忽然就有些不明白,JAVA中定义的那些 Interface到底有什么用呢?VB中没有他们不也挺好

糊涂了~~
...全文
689 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
redkey 2002-12-28
  • 打赏
  • 举报
回复
多重继承
marcal 2002-12-28
  • 打赏
  • 举报
回复
weimenren(愚人碼頭(每天进步一点)说的当然清楚了。我忍不住了。他有相当一段是抄了我的翻译的。
黑颈 2002-12-28
  • 打赏
  • 举报
回复
怎么还在说是多重继承,看看我上面的话
多重继承是不良设计,所以java和delphi已经禁止
接口不是为了实现多重继承,它是另一种的设计思想
在OO设计中,有两种关系要注意区别:
包含:是has a的关系
继承:是is a的关系
要仔细看看weimenren(愚人碼頭(每天进步一点)的举例
colors 2002-12-27
  • 打赏
  • 举报
回复
weimenren(愚人碼頭(每天进步一点)) 其实说得很清楚了,而且也是标准的解释。
sayo 2002-12-27
  • 打赏
  • 举报
回复
设计模式中的抽象工厂方法可以说明抽象类与接口的关系
以一个抽象类来代表一个抽象的工厂,并在其中设置一些通用方法,而在具体的工厂中再引出其他实际方法。若抽象工厂特别简单,则可以用接口来代替——即没有通用方法的实现。

从另外一个角度讲
抽象类指明所有从它继承的类的共同特点,在其中实现某些方法,但又不想让其作为具体类被实例化
接口只是规定了所有从其继承(或实现)的类的行为方式
sayo 2002-12-27
  • 打赏
  • 举报
回复
这个问题应该从
--封装
--多继承
--接口与抽象类的比较
等几个方面来分析

楼上几位基本阐明了前两个问题。接口与抽象类的比较一言以蔽之就是
接口 -- 象什么
抽象类 -- 是什么
liusuanse 2002-12-27
  • 打赏
  • 举报
回复
xx
marcal 2002-12-27
  • 打赏
  • 举报
回复
我在看各位个言论的时候突发奇想。下面说一下我的看法。
  接口是什么?本质上他就是一个方法名和指针的列表。其实我们平时建立的封装也就是实现了一个接口。也就是在这个列表里填写上了方法的程序段的指针。而继承就是使用两级列表,或者多级列表(程序源代码里面每各类应该只有一个列表)。而每一个列表就是一个接口。

  所以接口在c++里面就已经存在,只是c++允许程序员实现这些接口(就是填写如方法程序段的指针),就叫做多继承。

  站在高层来说,多继承或者说,java的接口机制,使到同一个对象拥有了多重的递属关系,在编写大型而复杂的程序的时候可以实现单继承关系图所无法实现的功能。

  java出于降低软件设计复杂度的考虑,没有允许程序员实现接口。这样逻辑上接口就不是继承关系图里面的一部分。继承关系图就简化了。
coaa 2002-12-27
  • 打赏
  • 举报
回复
设计模式
masterjames 2002-12-27
  • 打赏
  • 举报
回复
让别人知道,你要给他什么
mercy123 2002-12-27
  • 打赏
  • 举报
回复
由于多继承的复杂性,JAVA 禁止了多继承。interface
在一定程度上解决了多继承问题,但interface无属性无继承性
,有抽象性,只提供待实现的抽象(契约),使实现与界面分离。
mefaintII 2002-12-27
  • 打赏
  • 举报
回复
Interface实在是个好东西。
在设计模式中,它起了很重要的作用。
具体的模式我也搞不清楚了,好像是adaptor模式吧,当然名称不是关键。
我简单的说说他的作用。

理论地说:它实现了OO得多态性。
多态性究竟是什么?
多态性,我觉得实现的就是,在高层,你不关心如何去实现某件事情
你只规定,做一件事情必须要具有几个步骤(方法),而具体怎么作
在这几个步骤中又调用了什么,这些都是由实现类自己作。

这种性质,在通用事务处理中相当重要。
没有多态的情况下
一个控制程序,处理相同性质不同实现的业务,必须写无数个
switch ...case...
这种情况可维护性很差。
如果有了接口,我的控制程序只要接受接口类型,所有业务在作完之后
结果都上构成接口(这就是upcasting),那么控制程序就可以实现通用
处理。以后有新业务,也只需要按照接口标准来作就够了。

这样说不知道清楚否
黑颈 2002-12-27
  • 打赏
  • 举报
回复
to weimenren(愚人碼頭(每天进步一点)) :
我认为,从OO角度来看,接口不能说继承,应该说实现,其它认识和你据说相同。
在这里,很多人把接口说成主要是为了多继承,我觉得有些问题,严格来说,如上所说,接口不能说继承。而且如果说接口是为了实现多继承,那直接让类实现多继承算了,为何要发明一个'接口',让它来做呢?这不是多此一举吗?当然不是,多继承是OO中的大忌,所以java和Delphi都禁止了多继承。
在OO中不用多继承来解决问题,而是用'接口'的思想,所以有些人就以为'接口'就是实现多继承,而实际上接口是另一种设计思想,大家可以看看weimenren(愚人碼頭(每天进步一点)的举例或多看一些OO和设计模式的书来了解这一点。
wang_zheng_wz 2002-12-26
  • 打赏
  • 举报
回复
最好不要学basic,dijkstra说的
mengz 2002-12-25
  • 打赏
  • 举报
回复
就我的目前理解来看,他是JAVA中解决类不能多父继承的唯一方法了.

记得有本书说,接口是abstract类的一种终极形式.
techlife 2002-12-25
  • 打赏
  • 举报
回复
piano,violine,guitar都实现了instrument这个interface,那么无须知道他们的细节,只须知道让他们演奏的方法是play()就可以了,就是可以用一个方法对不同的instrument来进行操作
corner 2002-12-25
  • 打赏
  • 举报
回复
java中的interface主要完成了两个功能:
1、纯抽象类。
2、多重继承。
这个东西在java中进一步展开还可以讨论出很多东西,这里不详述。
gaojunbo 2002-12-25
  • 打赏
  • 举报
回复
就是可以实现多重继承的功能呀。
例,

子继承了父,也继承了母,如不使用接口怎么写?java只有单继承。所以就要使用接口来实现。

class son extends father implements mather
{

}
黑颈 2002-12-25
  • 打赏
  • 举报
回复
interface,中译名'接口',也就是连接两部分的纽带。注意,部分,即面向对象(OO)里说的对象,跟程序中的实例有区别。
接口使其调用接口的一边不用知道另一边是什么东西,怎样实现的,只要知道如何调用接口就行。而实现接口的一边也不用知道另一边是什么东西,只要知道实现接口就行。
这就很好的实现了OO中的封装性(而类继承则破坏了封装性,这就引起了广泛的争论,在此就暂不下定论,主要看实际中自己的把握来积累经验)。
举个形象的例子,假如说,未来的车子只要听到声音'启动',就会启动,听到'目的地 A',就会自动开到目的地A,那么不管什么人都能开车了,包括盲人,哑吧。而且考驾照也就很容易了,且只用考一个驾照,不用现在的什么A、B、C、D、E...那么多,就可以开所有的车子,包括卡车,轿车,摩托车。
虽然这在现在是个幻想,但在程序中可就轻松可以实现了,在程序中充分运用接口,按照可复用的设计方法,就可以美妙的解决很多类似的问题
baliok 2002-12-25
  • 打赏
  • 举报
回复
可以用来实现多重继承啊!!!
加载更多回复(9)

62,614

社区成员

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

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