专栏首页编程心路Java基础-抽象类和接口

Java基础-抽象类和接口

抽象类和接口也是 Java 面试中常考的,下面就来总结一下抽象类和接口的相关知识。

抽象类是类,Java 中类是单继承的,抽象类是从其他子类中抽象出来的类模板,包含这些子类共有的成员(属性和方法),子类在抽象类的基础上进行修改。和普通类一样,抽象类中也有属性和方法,但是在类名上却多了一个 abstract 关键字和可以有普通类没有的抽象方法,并且抽象类不能实例化,其他的和普通类没什么不同。抽象方法是一个被 abstract 关键字修饰的方法,不能在抽象类中实现,抽象类中只是个方法声明,要在子类中实现,不管方法体内是否真的有内容。

接口不是类,也不能被实例化,java 中接口之间是也单继承的(子接口),类和接口之间不是继承而是实现,一个类可以实现多个接口。接口中也有属性和方法,但是却比普通类多了很多的限制。接口中的属性和方法都是默认是被 public 关键字修饰的,不管你写不写。并且属性默认还被 static 和 final 关键词修饰,也即是属性是一个静态常量,属性可以通过接口名称直接使用。接口中的方法在 Java8 之前只能声明不能实现,这样的话,在接口方法中添加一个方法,就需要在其所有实现类中就实现该方法,不管在方法体中是否有内容,而在 Java 8 之后,接口可以添加默认方法了,默认方法被 default 关键字修饰,这种方法可以直接在接口中实现,其实现类可以直接使用该方法(不用声明)或者根据需要重写这个默认方法。

总结一波,抽象类和接口的异同点:

相同点:

  • 抽象类和接口都不能被实例化,但是可以作为引用类型引用子类对象和实现类对象。
  • 子类继承抽象类,实现类实现接口,子接口继承父接口,子类必须实现抽象类中所有的抽象方法,实现类必须实现接口中所有的非默认方法,而子接口不是必要的。

不同点:

  • 抽象类是类,接口是接口,类可以继承抽象类,也可以实现接口,但是接口只能继承接口,不能继承类。
  • 抽象类中的成员(属性和方法)可以是被 private、默认(default)、protected、public 关键字修饰,但接口中的成员只能被 public 关键字修饰,并且属性还要被 static 和 final 关键字修饰。
  • 抽象类虽然也不能实例化,但是却可以有构造方法,供子类使用,而接口则没有,并且抽象类中可以有静态代码块,接口也没有。

从设计的角度上来看,抽象类提供的是一种 IS-A 的关系,满足里氏替换原则,即子类对象必须能够替换父类对象中的所有内容。而接口提供的是一种 HAS-A 的关系,是一个 “赋能” 者,能够让其他类以最小的代价拥有某种方法。比如现实生活中,商家使用支付宝微信收款,支付宝微信就可以看做是 “接口“,有了这些接口,商家就有了线上收款的能力。

抽象类和接口在一定程度上都实现了代码的重用,但在很多情况下,接口要优于抽象类,接口没有抽象类严格的层次要求,在面向对象设计中,善用接口可以降低代码的耦合性。在软件设计中,也提倡多用接口少用继承,对应的也有策略设计模式和面向接口编程思想。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Java基础-Object类中的方法

    下面这些是 Java 中的 Object 类中方法,共 11 个,9 种方法,wait() 方法被重载了。

    Wizey
  • 在ArrayList的循环中删除元素,会不会出现问题?

    在 ArrayList 的循环中删除元素,会不会出现问题?我开始觉得应该会有什么问题吧,但是不知道问题会在哪里。在经历了一番测试和查阅之后,发现这个“小”问题并...

    Wizey
  • Bootstrap学习文档(一)

    Bootstrap 是最受欢迎的 HTML、CSS 和 JS 框架,用于开发响应式布局、移动设备优先的 WEB 项目,使用这个框架可以简单高效的开发出适配各种屏...

    Wizey
  • 请你讲讲abstract class和interface有什么区别?

    声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况...

    剑走天涯
  • 抽象类和接口的区别

    【编者按】本文作者是Sebastian Malaca,是面向对象编程的狂热者,不断深化研究整洁代码和高代码质量。本文中,作者通过多个方面深入剖析抽象类和接口的区...

    CSDN技术头条
  • EJ系列16-18条

    继承打破了封装性 子类依赖于超类中特定功能的实现细节 当超类发生改变,子类可能会遭到破坏

    程序亦非猿
  • Java基础常见面试题

    答∶ 类具有继承、数据隐藏和多态三种主要特性。类是同一类对象实例的共性的抽象,对象是类的实例化;类是静态的,对象是动态的,对象可以看作是运行中的类。类负责产...

    框架师
  • Java 面试题(一)

    switch更适合判断条件单一的多种情况的判断,在分支执行完后(如果没有break跳出),不加判断地执行下去;而if—elseif---else多分枝主要适用于...

    万能青年
  • 接口与abstract class区别

    1、抽象类可以包含部分方法的实现,这是抽象类优于接口的一个主要地方。 2、由于Java的单继承,每个类只能从一个抽象类继承,但是每个类可以实现多个接口,使用接...

    闵开慧
  • 重温设计模式之模板方法(Template Method)

    先从模板方法模式开始说起吧,这个模式以前看的时候没有太注意,现在又看了一遍,发现这个模式了不得呀(路人甲:其实每个模式都了不得,嘿嘿)。就是想武侠剧中的飞叶伤人...

    the5fire

扫码关注云+社区

领取腾讯云代金券