接口和抽象类的区别还是不明白,谁能举例说明一下

sssxing 2009-03-17 09:09:54
看了很多关于接口和抽象类的帖子,可是还是很模糊,谁能举例说明一下,谢谢!
...全文
15723 32 打赏 收藏 转发到动态 举报
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
ldw22008 2010-10-12
  • 打赏
  • 举报
回复
[Quote=引用 24 楼 jim123123123 的回复:]
我一直以为我懂了,看了你们说的我才知道我没懂。
[/Quote]
同感
b11ght 2009-09-14
  • 打赏
  • 举报
回复
学习了。。。。。。。。
wclszh 2009-03-18
  • 打赏
  • 举报
回复
个人喜欢接口的比喻方式
chxy148 2009-03-18
  • 打赏
  • 举报
回复
接口是一种特殊的抽象类~~~
sssxing 2009-03-18
  • 打赏
  • 举报
回复
谢谢各位前辈的回答,比书上讲得明白,我再研究研究
bingxue2332 2009-03-17
  • 打赏
  • 举报
回复
接口是对具有的动作能力预定义
抽象类是对具有的动作的抽象

FFDFDD 2009-03-17
  • 打赏
  • 举报
回复
受益匪浅
树成 2009-03-17
  • 打赏
  • 举报
回复
接口和抽象类的区别大了。
首先从属性上来说:
1、首先是继承关系,接口是多继承的关系,接口与接口之间是多继承的,类与接口之间是多实现的关系,而抽象类是一个类,由类对他进行单继承,不能多继承,接口不能继承抽象类,但是抽象类可以实现多接口;接口不能继承类或抽象类,但是抽象类可以继承抽象类和普通类。
2、方法以及属性定义方面,抽象类可以定义任何属性的方法以及实现方法,如private、protected、native等等(当然抽象方法有所限制),但是接口定义的方法不能够有实现,且属性必须为public的实例方法,不能有native等定义等等,接口定义的属性必须是public static final的静态常量。
然后从软件开发阶段来讨论:
接口是属于设计后阶段的定义的,用来协同各个模块以及各个功能之间通信与调用定义的。而抽象类是属于开发前阶段定义的,用来实现功能模块的一些基础的或者公有的或者默认的代码,以及规定一些变动功能与实现所需要依赖的规范。
J600600 2009-03-17
  • 打赏
  • 举报
回复
xuexile
guoapeng 2009-03-17
  • 打赏
  • 举报
回复
首先抽象类是一个类,只是它还有些方法没有实现,在它这个抽象层次还不能实现,
例如动物是一个抽象类,他的 移动 方法还没有确定,因为有的动物是四条腿移动,有两条腿移动,
有的飞,有的爬,但是他们都能移动,这样你可以把动物定义为抽象类,将动物的移动方法定义为
抽象方法,强制继承它的子类去实现。而且你在动物这个类中移动 虽然没有实现,但是可以调用他。
总的来说面向对象只能意会不能言传,说起来很费力。

接口: 你就想一下你的电脑上的usb 接口, 接什么设备都可以是不是, 而且你的电脑不知道他
是什么设备, 这就是接口的好处,只要它遵循USB2.0 标准就能接到USB接口上使用。
多比较一下这个接口,和java的接口 你就清楚了。
axman 2009-03-17
  • 打赏
  • 举报
回复
本质的区别是多继承和单继承的问题。

现在我们来定义一个歌唱家和作曲家。
如果用抽象类

abstract class Singer{
public abstract void sing();
}


abstract class Composer{
public abstract void melodize();
}

OK,现在有一个人既是歌唱家同也是作曲家,你实现给我看看。


用接口就非常容易。

interface Singer{
public void sing();
}

interface Composer{
public void melodize();
}


class APerson implements Singer,Composer{
public void sing(){}
public void melodize(){}
}

「已注销」 2009-03-17
  • 打赏
  • 举报
回复
大家解释的不错 学习学习ing
kkfvjmtd 2009-03-17
  • 打赏
  • 举报
回复
这个很简单的吧,看看书吧
fjilyfe 2009-03-17
  • 打赏
  • 举报
回复
主要的区别就是继承是单集成,接口可以实现多个。
当你有很多类要实现某种功能的时候,我们即可以用抽象类也可以用接口,但是一但你用了抽象类,那么以后这个类就不能再继承其他的类了,这样做有些不太好吧。所以通常实现方法我们一般都用接口。
KAKUKYOWU 2009-03-17
  • 打赏
  • 举报
回复
首先得搞懂什么是抽象类:
一.概念:
在面向对象的概念中,我们知道所有的对象都是通过类来描绘的,但是反过来却不是这样。
并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。
比如:如果我们进行一个图形编辑软件的开发,就会发现问题领域存在着圆、三角形这样一些具体概念。
它们是不同的,但是它们又都属于形状这样一个概念,形状这个概念在问题领域是不存在的,它就是一个抽象概念。
正是因为抽象的概念在问题领域没有对应的具体概念,所以用以表征抽象概念的抽象类是不能够实例化的。
二.语法:
抽象类中可以有抽象方法,也可以有普通方法,抽象方法只可以被声明,不能被实例化(就是不能有方法体),
必须由继承该抽象类的普通类来实例化。

其次,接口就是一个特殊的抽象类。
差别在于接口中的方法必须都是抽象方法,不可以有普通方法而已。

再举个比较形象的例子:
普通类------我们这些普通人;
抽象类------芙蓉姐姐(人人都有打破思想保守旧传统的能力,但是只有人家芙蓉姐姐有胆量);
接口------蜘蛛侠、超人(实现了接口就相当于你有了某种特殊功能)。


oklinsong 2009-03-17
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wclszh 的回复:]
抽象类里面的方法可以有实现,但是接口里面的方法确是只能声明。
[/Quote]
正解,补充一点,因为java不支持多重继承,所以继承抽象类只能继承一个,但是可以实现多个接口。使用哪个看具体需求。
yangming164 2009-03-17
  • 打赏
  • 举报
回复
楼上的说得好了。只会用还没注意过这多
zouzou1981 2009-03-17
  • 打赏
  • 举报
回复
呵呵,感觉当老师教完java,再来做开发,基本功好得多
wanghuichp 2009-03-17
  • 打赏
  • 举报
回复
学习了
luojihaidao 2009-03-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 xyz20003 的回复:]
接口是设计的结果
抽象类是重构的结果
[/Quote]

概括的非常精简。

接口的方法全部是public 抽象的。

抽象类的方法可以有非抽象。
加载更多回复(12)

62,614

社区成员

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

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