为什么java要出现接口和抽象类,二者区别是什么

文章转自 http://dy.163.com/v2/article/detail/EGPGS93U053692ZG.html

如果有java编程经验的同学可能会发现,接口倒是经常写,但是抽象类好像并不怎么熟悉,这两者的具体作用到底是什么呢?有什么区别呢?

先说对这两个概念的理解

我们先说抽象类,其实抽象类的设计理念是“is-a”关系,就是说它更关心的是被抽象的这些个对象是什么,比如说藏獒,贵宾,哈士奇,我们要给他们写抽象类,那抽象出来这个类就是狗狗类,无论什么品种的狗,都是狗狗。

再说说接口,接口的设计理念是“has-a”关系,它关心的能做什么,比如说你可以写一个接口,里面有吠()这个方法,再写一个接口,里面有跑()这个方法,那么你可以让狗狗类实现这两个方法,让狗狗拥有这两项功能。而你可以发现,人类,喵类也都可以实现整个跑这个接口来拥有这项功能。

所以在java中,类的单继承多实现的概念就好理解了,狗狗只能继承狗狗这个类,不可能让它去继承人类或者喵类,但能实现n多个接口,跑、跳、吠、打滚。

在应用场景中,抽象类用于同类事物,而接口多是可以横跨很多个类。

他们有哪些具体区别呢?

1)抽象类则可以包含普通方法,接口中的普通方法默认为抽象方法。

2)抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是 public static final 类型的,并且必须赋值,否则通不过编译。

3)接口不能包含构造器,抽象类可以包含构造器,抽象类里的构造器并不是用于创建对象,而是让其子类调用这些构造器来完成属于抽象类的初始化操作。

4)接口里不能包含初始化块,但抽象类里完全可以包含初始化块。

5)就是我们所说的单继承多实现了。

最后,送上我在一本书上看到的特别绕的三句话,接口可以继承接口,抽象类可以实现接口,抽象类可以继承具体类。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值