你还记得Java中抽象类和接口各自的特点吗?

前言

抽象类和接口在面试中经常被同时问到,两者有一定的相似点与不同点,很容易发生混淆。我本人也是记住了忘,忘了复习一下,过段时间又忘了。所以说今天写下这篇文章总结一下两者的特点与区别,顺便巩固一下自己的Java知识体系,也方便以后复习。我会尽可能全面的阐述两者各自的特点,如有遗漏,敬请补充。


抽象类

  1. 抽象类属于类,由class关键字修饰,单继承,同时会由abstract关键字修饰;
  2. 含有抽象方法的类是抽象类,但是抽象类可以没有抽象方法;
  3. 抽象类可以拥有构造函数,但是无法实例化,即无法通过new创建对象。但是仍然可以定义抽象类的变量,使其指向子类实现,并且实现多态;
  4. 抽象类可以拥有非抽象方法的具体实现;而抽象类中的抽象方法只有方法体,没有实现;
  5. 子类继承抽象类父类,则必须重写其全部的抽象方法,否则该子类也只能声明为抽象类,无法实例化;

接口

  1. 接口由interface关键字修饰,多实现;
  2. 接口既可以被接口继承,使用extends关键字(和类继承类一样);也可以被类继承,使用implemets关键字;
  3. 接口中的方法全部都是抽象方法,且必须全部被继承该接口的子类所实现;
  4. 接口是公开的,没有私有的方法或变量,即不会出现private关键字;
  5. 接口中的成员变量默认由public static final修饰,且必须赋初值;所有抽象方法都由publicabstract修饰;

总结

"接口"就是比"抽象类"更加"抽象"的"抽象类",抽象类中还能有非抽象方法的具体实现,而接口里面全部都是抽象方法。抽象类和接口都无法实例化,都是由其子类实现其内部的抽象方法,两者都是"抽象"的表现,抽象方法声明好,让其子类对该方法实现相应的功能就好啦。

而现在常说的"面向接口编程",也就是在面向对象的思想里,让接口定义一套规则,其子类只需考虑具体实现就好了。

猜你喜欢

转载自blog.csdn.net/qq_45590494/article/details/106007005