[请进]大家能不能说说抽象类和接口的异同.....up有分!

stars_of_leo 2004-04-25 04:20:01
同题,
再说说它们各自的优势是什么,
还有就是一般在什么时候用抽象类,
什么时候用接口?

五一前结帖.
...全文
159 52 打赏 收藏 转发到动态 举报
写回复
用AI写文章
52 条回复
切换为时间正序
请发表友善的回复…
发表回复
game0ver12345 2004-04-27
  • 打赏
  • 举报
回复
回复人: allenhe() ( ) 信誉:100 2004-04-26 23:35:00 得分:0


没有方法的接口是标示接口,例如java.io.Serializable


game0ver12345(sfsfdsfdsdfsf) ( )
我会C++

============================================

第一句话对。

“我会C++”,不懂你想对我说什么
zijibense 2004-04-27
  • 打赏
  • 举报
回复
up
game0ver12345 2004-04-26
  • 打赏
  • 举报
回复
实际上,即便你不声明为static final,java一样会把它当作static final量来处理

=======================================================

不同意这句话。

你说说这句话的道理,为什么会是这样?
koskinen 2004-04-26
  • 打赏
  • 举报
回复
问题的中心是多重继承的问题
allenhe 2004-04-26
  • 打赏
  • 举报
回复
我估计他还不太明白接口和抽象类到底什么区别
我认为接口不应该和实现多继承扯在一起
简单地说,不用为了多继承而多继承
就好比不会为了delegate而delegate一样

紫黑蓝白 2004-04-26
  • 打赏
  • 举报
回复
恩,我也喜欢这砖头:《java与模式》

看过后,对接口和抽象类的使用有了新的认识。。。

虽然都推荐使用借口,少用抽象类。但抽象类的优点也是接口不可代替的!
allenhe 2004-04-26
  • 打赏
  • 举报
回复
没有方法的接口是标示接口,例如java.io.Serializable


game0ver12345(sfsfdsfdsdfsf) ( )
我会C++
wingofsea 2004-04-26
  • 打赏
  • 举报
回复
up!!!
game0ver12345 2004-04-26
  • 打赏
  • 举报
回复
回复人: andy100085(铁桶师傅) ( ) 信誉:100 2004-04-26 22:33:00 得分:0


不理接,为什么要引进接口?
有些时候,某接口里只有一个方法 public String getValue()
直接在你要实现的类里,实现这个方法不就得了,干吗非得继承一下该接口,
再给出实现,费这么多时间???
========================================================

极有可能不止一个类存在这个方法public String getValue()





新来的萌新 2004-04-26
  • 打赏
  • 举报
回复
不理接,为什么要引进接口?
有些时候,某接口里只有一个方法 public String getValue()
直接在你要实现的类里,实现这个方法不就得了,干吗非得继承一下该接口,
再给出实现,费这么多时间???
还有有些接口里根本就没有方法,就更奇怪了!!???
那位高手解释一下?很是一个迷惑????
game0ver12345 2004-04-26
  • 打赏
  • 举报
回复
举个例子:

  一把刀是武器也是厨具。好象用多继承比较好。

所以刀有厨具的所有属性和方法,也有武器的所有属性和方法。
game0ver12345 2004-04-26
  • 打赏
  • 举报
回复


举个例子:

  一把刀是武器也是厨具。好象用多继承比较好。
game0ver12345 2004-04-26
  • 打赏
  • 举报
回复
回复人: allenhe() ( ) 信誉:100 2004-04-26 20:12:00 得分:0


何必一定要多继承呢?


=======================================

有时一些类用多继承比单继承更好的表达出他们的实际关系。



AsukaE 2004-04-26
  • 打赏
  • 举报
回复
接口类似于一个完全的抽象类,但是绝不是抽象类
因为接口本身就不属于类集
打个或许并不准确的比方
如果我们把类集隐喻为整个社会的话
那么接口就相当于这个社会的社会地位

以上浅见,有不当之处还请指正
allenhe 2004-04-26
  • 打赏
  • 举报
回复
何必一定要多继承呢?
allenhe 2004-04-26
  • 打赏
  • 举报
回复
那我的解释也未必正确
那我用自己的理解打个比方
比如说插头
插头和插座不一定是同一个厂家生产的,而且生产插头的厂家很多。
但是所有厂家生产的总是3眼,2眼插头
即便是不同厂家生产的插头插座,那总是能够搭配一起使用

在这里插头的针脚的粗细,位置,以及它的标称电压功率,我们就可以理解成为一个接口(interface)
插座厂家无需知道插头是如何设计的,他只知道这种型号的针脚位置大小以及技术参数总是一样的,因此它只需针对这些参数去操作。
换句话说接口定义了一系列方法,调用类无需关心它里面做了一些什么,而只需要知道这个方法完成这个功能就可以了,比较典型的应该是各种listener


接下来还是用插头吧,插头的针脚和技术参数往往是固定的(可以理解为实现implements了这种接口),但是里面的电路设计各个厂家都是不同的。
那不同的厂商可能有各种型号的产品,但是为了节省开发周期和原材料,他们规定了自己产品的一种设计原则,同时把共同的一些模块做成了通用配件,我们可以把这个行为理解成一种抽象类(abstract class)
具体的各个型号可能不同程度的利用到了那些通用配件,不过设计人员也不需要知道那些通用配件的具体逻辑,他只知道这个配件完成这个功能,几个配件搭配可以完成一个电路逻辑就可以了。当然,再复杂一点说,厂商规定了通用配件必须和一些配件搭配使用,这些配件是各个产品不同的,比如便宜的可以用便宜的原材料,贵得可以用贵金属做。通用配件和自定义配件无需知道对方如何设计,只需要完成自己所规定的功能就可以了
这个可以理解为在非abstract方法调用abstract方法。


打字太累。。
game0ver12345 2004-04-26
  • 打赏
  • 举报
回复
回复人: allenhe() ( ) 信誉:100 2004-04-26 12:57:00 得分:0


我估计他还不太明白接口和抽象类到底什么区别
我认为接口不应该和实现多继承扯在一起
简单地说,不用为了多继承而多继承
就好比不会为了delegate而delegate一样

==========================================================

在JAVA里,只能用接口实现多继承。

“我估计他还不太明白接口和抽象类到底什么区别”,这句话好像是多余的,因为如果楼主懂,很有可能就不发这个帖子了。^_^

Kosling 2004-04-26
  • 打赏
  • 举报
回复
我总觉得接口有点象协议集合?!
sylmoon 2004-04-26
  • 打赏
  • 举报
回复
to 楼主:
我正好也想问这个问题的~

to allenhe() :
有很多初学者在里面,可是你这样让大家很不舒服
既然不懂抽象类和接口,你为什么不能好好解释一下呢?
minghuitian 2004-04-26
  • 打赏
  • 举报
回复
up!
加载更多回复(32)

62,614

社区成员

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

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