抽象类和接口区别

抽象类:

一个类被abstract关键字修饰就是抽象类。

定义很简短,可能会有很多朋友质疑,《java编程思想》中说含有抽象方法的类就是抽象类,我试了下只要用abstract修饰的都是抽象类,就算里面不含有抽象方法,语法层面也是正确的。下面所有关于抽象类的总结都是基于抽象类含有抽象方法。

下面说一下抽象类的特点:

(1)抽象类由于含有抽象方法(未实现)所以无法实例化,需要被继承

(2)继承抽象类必须实现抽象类的抽象方法,除非继承了抽象类的类还是一个抽象类,

(3)抽象类的抽象方法访问修饰符必须为public或者protected,缺省情况下和类不同默认为public  

(4)抽象类中的其他方法,变量和正常类没有区别

接口:

被interface修饰(和android aidl区分)

 接口中可以含有变量和方法,变量会被隐式地指定为public static final,但一般情况不要在接口中定义变量,方法都是抽象的(jdk8函数式接口可以有实现方法),用private、protected、static、 final等修饰会报编译错误。

接口特点:

(1)如果有变量都是public static final的

(2)方法都是抽象的,方法的默认访问修饰符为public

(3)不能直接实例化使用,需要实现

(4)接口之间可以相互继承

抽象类和接口的区别:

(1)抽象类中变量可以是正常类型的变量,接口中的变量只能是public static final

(2)接口中的方法都是抽象的,抽象类可以提供已经实现的

(3)一个类可以实现多个接口,只能实现一个抽象类

(4)接口中的方法只能是public,不能是static final等无法继承实现,抽象类中的方法则没有那么多限制。

抽象类本质还是类,抽象类有点类似我们平时抽取的基类对共性进行抽取,可以作为经常使用的类的父类。

接口是更抽象的类(感觉轻量级),接口中的变量都是常量没有讨论价值,方法都是抽象的,更像是对行为的规范,要做什么事都已经规定好,至于具体怎么做每个人都不同。

总结:抽象类侧重抽象,主要作为基类,写好共性的功能属性,留出抽象方法供实现;

接口侧重行为,规定了要实现的所有方法,但所有的方法都是抽象的,是对行为的规范。

接口新特性

jdk8接口可以定义static和default方法。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值