java抽象类和接口的区别

作为初学者,刚接触抽象类和接口时常会分不清它们的区别和用途,查阅相关资料后特此进行总结,希望能帮助到更多的人。

接口:
使用关键字interface声明,需要其他类使用关键字implement实施。
下面是一个典型的接口定义:
在这里插入图片描述
下面是一个类对它进行实施:
在这里插入图片描述
一个接口就好像是你和客户规定的一个协议,客户只告诉你需要哪些方法,而你得自己构造类去实现这个接口,并且对里面的所有方法都得实现。一个接口就是一个抽象方法的集合,里面没有rep,没有构造器,没有方法实现,所有方法都必须声明为public,接口之间可以相互继承。

抽象类:
使用关键字abstract进行声明,可以被子类通过关键字extends继承。
下面是一个典型的抽象类的定义:
在这里插入图片描述
一个抽象类逻辑上是介于接口和普通类之间的,它和普通类一样可以拥有构造器,可以有具体方法实现,可以用public,protected等关键字修饰,可以运行,可以被其他类继承,但不能实例化。同时也可以像接口一样定义一些抽象方法,然后在子类中进行重写。

下面对二者做一个简单对比:

抽象类接口
通过关键字abstract声明通过关键字interface声明
可以有构造器,不能实例化没有构造器,不能实例化
可以添加main方法运行不能运行
可以有rep没有rep
可以用关键字public,private,protected进行修饰默认为public,且不能更改
可以实施接口 ,可以继承类只能继承一个或多个接口
可以有方法实现只能是方法声明,不能实现

使用范围:
二者都是对多个类中的共性进行提取,然后进行统一管理,都是为了提高代码的可复用性,可扩展性,可维护性和可读性。
接口比抽象类更为抽象,声明时也要更为小心,因此里面的方法需要十分稳定,因为如果对里面的方法进行更改,删除或添加,则所有对它实施的子类都得进行更改。
而抽象类由于可以进行方法的实现,因此若不同类中拥有完全相同的方法的实现,则可以在抽象类中实现该方法,然后让各个类对它进行继承即可,各个类中独有的方法则在各个类中进行实现。

一般做法是,先使用接口对各个类中稳定且通用方法进行声明,然后使用一个抽象类对这个接口进行实施,若各个类中拥有公共方法,且实现完全一样,则将这些方法直接在抽象类中进行实施,然后让各个类继承这个抽象类,最后在各个类中添加自己独有的方法。这样,如果添加了一个公共方法,则只需在接口中添加声明,然后在抽象类中添加实现即可。这样能大大提高代码的可复用性和可维护性。
这里推荐一个博客,写得十分详细深入:
https://blog.csdn.net/ttgjz/article/details/2960451

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值