Java抽象类与接口

抽象类和接口都是OOP的抽象表现。两者有相似的地方,也有非常本质的区别,本文简单介绍下Java中的抽象类和接口。

抽象类

看抽象类之前先了解下抽象方法。所谓抽象方法,就是用abstract修饰的方法,其特殊之处在于只需要给出方法定义,无需具体实现,方法的具体实现交由子类完成。

抽象类:就是用abstract修饰的类。抽象类中的方法可以是抽象方法,也可以是非抽象方法。抽象类的本质在于:对若干种事物的共同本质进行抽象,有点道生一,一生二,二生三,三生万物的意思再里面。

比如:苹果、葡萄、菠萝、猕猴桃等等都有一个共同属性,即它们都是水果,那么我们可以从这些物品里面里面抽象出一个“水果”的概念。

那么抽象类和普通类有什么区别呢?

  1. 抽象类不能new 一个对象
  2. 抽象方法必须是public或者protected,因为如果是private,那么不能被子类继承,子类就无法实现该抽象方法。缺省情况下,默认为public。
  3. 如果一个类继承于一个抽象类,则该子类必须实现父类的抽象方法。如果子类不实现,则也需要将该方法定义为抽象方法。

接口

看完抽象类,接下来看看接口。前面提到,抽象类是对事物进行抽象,接口则不同,它是对方法的抽象(这一点是抽象类和接口之间最本质的区别)。

什么叫做对方法的抽象?比如手机、电脑、平板、MP3都有播放音乐的功能,那么我们可以抽象出一个“播放音乐”的接口,实现了该接口的类都具备播放音乐的功能。

在Java中,接口通过interface关键字标识,比如public interface InterfaceA{ }。在接口中,我们可以定义哪些东西呢?

  • 变量
    • 接口中的变量,隐式指定为(并且只能是)public static final变量
  • 方法
    • 接口中的方法,隐式指定为(并且只能是)public abstract方法,因此不能有具体实现

另外,在Java中一个类允许实现多个接口,并且如果一个类实现了某个接口,必须实现该接口中的所有方法。这是抽象类和接口的两个重要区别。

总结

前面介绍了Java中的抽象类和接口,它们都是OOP中抽象特征的体现,这里简单总结下二者之间的区别:

  1. 设计本质:抽象类是对事务的抽象(大家都具有某种特性),而接口是对方法的抽象(大家都具有某种功能)。
  2. 语法
    • 抽象类通过继承(extend)来使用,接口通过实现(implement)来使用,一个类只能继承自一个父类,但是可以实现多个接口。
    • 抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的;
    • 接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法;
    • 抽象类可以提供成员方法的实现细节,而接口中只能存在public abstract 方法。

参考资料

  1. https://www.cnblogs.com/dolphin0520/p/3811437.html
打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2021-2022 Yin Peng
  • 引擎: Hexo   |  主题:修改自 Ayer
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信