抽象类和接口

抽象类

1、抽象方法

使用abstract修饰的方法,没有方法体,只有声明。定义的是一种规范,告诉子类必须要给抽象方法提供具体实现。

2、抽象类

包含抽象方法的类就是抽象类。通过abstract方法定义规范,要求子类必须定义具体实现。通过抽象类,可以做到严格限制子类设计,使子类之间更加通用。

3、抽象类使用要点

  • 有抽象方法的类只能定义成抽象类
  • 抽象类不能实例化,即不能用new来实例化抽象类
  • 抽象类可以包含属性,方法,构造函数。但构造函数不能来new实例,只能用来被子类调用。
  • 抽象类只能用来被继承
  • 抽象方法必须被子类实现

接口

1、定义

接口就是比抽象类还抽象的“抽象类”,可以规范的对子类进行约束。全面专业的实现了:规范和具体实现的分离。
面向对象的精髓就是对对象的抽象,最能体现这一点的就是接口。
接口的成员(字段+方法)默认都是public的,并且不允许定义为private或者protected。
接口的字段默认都是static final的,方法默认都是abstract的,不写也是。
接口可以多继承。

2、要点

  • 子类通过implements来实现接口中的规范。
  • 接口不可以用来创建实例,但是可以用来声明引用变量类型。
  • 一个类实现了接口必须实现接口中的所有方法,并且这些方法只能是public的。
  • 在jdk7之前,接口中只能包含静态常量,抽象方法,不能有普通属性,构造函数,普通方法。
  • jdk8后,接口中包含普通的静态方法。
  • jdk9在接口中引入了私有静态方法。

接口和抽象类的比较

  • 从设计层面看,抽象类提供了一种IS-A关系,那么必须满足里式替换原则,即子类必须能够替换掉所有父类对象。而接口更像是一种LIKE-A关系,它只是提供一种方法实现规范,并不要求接口和实现接口的类具有IS-A关系。
  • 从使用上看,一个类可以实现多个接口,但是不能继承多个抽象类。
  • 接口的字段只能是static和final类型的,而抽象类没有这种限制
  • 接口的成员只能是public的,而抽象类的成员可以有多种访问权限。

区别:

  • 普通类:具体实现
  • 抽象类:具体实现,规范(抽象方法)
  • 接口:规范

使用选择

  • 接口
    需要让不相关的类都实现一个方法
    需要使用多重继承
  • 抽象类
    需要在几个相关的类中共享代码
    需要能控制继承来的成员的访问权限,而不是都为public
    需要继承非静态和非常量字段

在多数情况下,接口优先于抽象类。因为接口没有抽象类严格的类层次结构要求,可以灵活的为一个类添加行为。并从java8开始,接口也可以有默认的方法实现,使得修改接口的成本变得很低。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值