美文网首页Java 杂谈
Java基础-抽象类和接口

Java基础-抽象类和接口

作者: Wizey | 来源:发表于2018-09-02 08:19 被阅读6次

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

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

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

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

相同点:

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

不同点:

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

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

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

觉得文章还不错,可以关注 编程心路 微信公众号,在编程的路上,我们一起成长。

编程心路

相关文章

  • 接口和抽象类有什么区别

    学习Java基础知识,打通面试关~十三接口与抽象类面试常客:谈谈你对抽象类和接口的理解 接口用interface修...

  • 2019Java工程师面试题汇总,全会的话月薪至少3W+

    Java基础知识 Java中==和equals和hashCode的区别int与integer的区别抽象类的意义接口...

  • scala的Trait

    Trait基础 scala 中的Trait和Java中的接口(interface)极其类似 接口是彻底的抽象类,所...

  • Java 学习之路

    我认为的基础部分: java 基本的数据类型和循环,遍历等基础语句 java 的类与对象,还有对抽象类和接口的理解...

  • 近期Java高级工程师面试总结

    近期Java高级工程师面试总结 面试总结 Java基础 Hashtable和HashMap的区别。 抽象类与接口的...

  • 最近Java高级工程师面试总结

    面试总结 Java基础 Hashtable和HashMap的区别。 抽象类与接口的区别。 final关键字的使用和...

  • Java基础-抽象类和接口

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

  • java抽象类和接口小记

    Java抽象类和接口小记 Java抽象类和接口实现了java的多态.多态是面向对象程序语言的核心,在项目开发过程中...

  • java abstract

    参考java抽象类和抽象方法Android开发:抽象类(abstract class)和接口(Interface)...

  • 第13讲 | 谈谈接口和抽象类有什么区别?

    典型回答 接口和抽象类是 Java 面向对象设计的两个基础机制。接口是对行为的抽象,它是抽象方法的集合,利用接口可...

网友评论

    本文标题:Java基础-抽象类和接口

    本文链接:https://www.haomeiwen.com/subject/nabpwftx.html