接口和抽象类的区别

1.成员方法方面:
抽象类可以存在普通成员函数,接口只能存在public abstract方法(抽象方法)

JDK1.8之后,接口可以存在默认方法,也可以有方法的具体实现

2.成员变量方面:

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

实际上在接口中 public static final写不写都一样,因为被默认是一个常量了

3.继承实现方面:

抽象类只能继承一个,接口可以实现多个 (因为Java是单继承的)

接口的设计目的:是对类的行为进行约束,也就是提供一种机制,可以强制要求不同的类具有相同的行为,只约束了行为的有无,但不对如何实现行为进行约束

定义规范:接口定义了一组抽象方法和常量,用于描述类应该具有的行为和属性。它定义了一个标准,规定了类应该实现哪些方法。

实现多态:接口提供了多态的实现方式,允许不同的类实现相同的接口,从而实现了多态性。

解耦:接口将类的定义与实现分离,使得类之间的耦合度降低,提高了代码的灵活性和可维护性。

扩展性:接口可以通过继承和实现的方式进行扩展,允许在不改变原有代码的情况下进行功能的扩展和修改。

 接口可以这么去理解,比如存在 interface:吃东西 和 interface:叫  .那么谁会有这些行为就去实现它,例如 cat implements 吃东西,叫 , dog implements 吃东西,叫.而具体cat和dog如何实现就不关接口的事了,因为cat和dog吃的东西和叫声都不一样

抽象类的设计目的:
提供通用行为:抽象类定义了一组通用的行为和属性,用于多个子类之间共享。它提供了一种模板或者基础,用于子类的继承和扩展。

封装共性:抽象类封装了多个子类之间共同的部分,避免了代码的重复,提高了代码的复用性和可维护性。

实现代码复用:抽象类可以包含实现了的方法,子类可以直接继承这些方法,从而实现代码的复用。

限制特定行为:抽象类可以定义一些抽象方法,强制子类对这些方法进行实现,从而限制了子类的行为。

注:先有子类再有抽象类,表达的是 is a的意思,例如抽象类:car和具体类:帝豪,就存在 帝豪 is a car 的关系,这就是抽象类和其子类的关系.因为抽象类car可能会定义driver方法,music方法,以及含有价格等成员变量,而帝豪作为一辆车,也会拥有这些方法,因此让 帝豪 extend car 就能够继承这些方法和属性,实现代码复用

若这时有一个新类:宝马,那一样可以 宝马 extend car,就能实现代码复用,提高代码复用性和可维护性,因为宝马 is a car,宝马同样拥有 driver行为,music行为,价格属性.(这就是代码复用方面)

而拓展方面呢,帝豪 extend car 之后依然可以有专属于自己的方法,例如:public 跑网约车()

宝马 extend car 之后除了 driver(),music(),价格()等继承的方法,也可以有自己的专属方法

例如: public 泡妞().

总的来说,接口和抽象类都是用于描述类的抽象行为和属性的方式,它们的设计目的是为了提高代码的灵活性、可维护性和复用性,同时也提供了多态的实现方式。选择接口还是抽象类取决于具体的需求和场景。

记住最重要的一句话:  抽象类是对事物的抽象,接口是对行为的抽象!

  • 15
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值