Java 抽象类和接口的区别

接口和抽象类的区别?

  • 设计角度

    1、接口是自上而下的,简单来说就是接口的设计规范是先有接口,后有类实现。表示关系:has a

    2、抽象类是自下而上的,简单来说就是抽象类的设计规范是先有子类方法的共有,后有父类抽取的抽象类。表示关系:is a

  • 使用角度

    1、在抽象类中可以有构造方法,非抽象的普通方法,静态方法以及静态代码块,并且可以提供方法的实现,而接口中只能有public修饰的抽象方法,在JDK1.8之后可以有default修饰方法以提供方法的实现。

    2、抽象类的成员变量可以是各种类型的,但接口的成员变量只可以是final static public类型的。

    3、都不可以被实例化,接口是为了解决类不能多继承的问题,抽象类是用来继承的,接口是用来实现的。

    4、接口中不能含有构造器,静态代码块,静态方法,而抽象类中可以有构造器,静态代码块和静态方法。

  • 访问速度

    抽象类的访问速度比接口要快,因为接口要在勒种寻找具体的实现

  • 拓展性

    要在抽象类中添加方法可以直接提供默认实现,但是在接口中添加方法却要改变接口的实现类,JDK1.8之后可以提供方法的实现子类不需要实现

  • 为什么接口的成员变量需要用static final 修饰?

    static:为了避免子类使用时产生的歧义。(子类可能实现多个接口,多个接口的变量可能一样)

    final:既然必须是static修饰的那么所有的子类共享,而接口是一种抽象,所以为了避免一个子类修改影响到了其他子类,因此就不应该允许子类修改,也就必须定义为final了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值