抽象类 VS 接口

同:
1.抽象类和接口都是为了将方法进行抽象,然后让子类去实现;
2.不能创建本类对象,只能由子类去实例化子类对象。
异:
1.子类要扩展它们时,对抽象类用extends(声明抽象类时用abstract),对接口用implements(声明接口时用interface),这只是关键字和称呼不同,本质都一样;
2.抽象类可以实现接口,接口只能继承接口,不能继承类;同时,一个类只能继承一个父类,但可以实现多个接口;所以,既可以用抽象类又可以用接口的时候,尽量去选择接口,这样子类的灵活性会更高;
3.抽象类更进一步地抽象后,就诞生了接口,接口比抽象类更纯粹,因为它没有了成员属性,只有方法,子类实现接口后,唯一能做的就是重写方法;抽象类可以定义成员属性,而接口只能定义静态属性,而且只能用final关键字定义静态常量,不能定义静态变量;
4.接口没有构造器,可以说是非常纯粹了,接口就是一个只有方法和静态常量的类。抽象类中的构造器是为了限定子类的构造方法,例如:抽象类可以将构造器定义好几个参数,子类想要实例化则必须想办法传入这几个参数才行。
版本差异:
接口在java8之前更加纯粹,只能定义抽象方法,不能自己实现方法,也不能定义静态方法;到了java8之后,才可以定义静态方法,以及,可以用default关键字来实现方法(default关键字的推出是为了保证向下兼容性)default修饰后就不再是抽象方法了,也不会强制要求已有的子类去实现方法;java9推出了接口新特性,定义private方法,内部逻辑可以拆开了,方便了代码维护
这就是我们常说的面向接口开发,越到后面,抽象类和接口的差异就会越来越小
什么时候用接口和什么时候用抽象类:
当需要让子类extends成员变量或需要控制子类的实例化时用抽象类,否则就用接口。
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值