前言
本文与之后的几篇文章将是某整理的学习笔记,在此与诸位分享
以下是本篇文章正文内容,该系列会持续更新,敬请关注。
正如面向对象四大特性(抽象、封装、继承、多态)所述,定义类的过程就是抽象和封装的过程,而接口与抽象类则是对实体类进行更高层次的抽象,仅定义公共行为和特征。
接口与抽象类的共同点是都不能被实例化,但可以定义引用变量指向实例对象。
先来了解接口、抽象类、构造方法的概念:
一、接口
- 接口是一种行为规范
- 在Java编程语言中是一个抽象类型,是抽象方法的集合
- 一个类通过实现接口的方式,来实现接口中的抽象方法
- 接口侧重定义任意的类有没有相同语义的方法,它是一个一经定义不轻易更改的规范
二、抽象类
- 如果一个类中没有包含足够的信息来描绘一个具体的对象,那么这样的类就是抽象类
- 抽象类侧重于归纳同一父类的子类的共同特征,例如属性、方法
三、构造方法
- 构造方法是方法名与类名相同的特殊方法,在新建对象时调用
- 可以通过不同的构造方法实现不同方式的对象初始化
- 它用来在对象初始化前对对象进行一些预处理,提供了实例化一个具体东西的入口
接口与抽象类的语法区别
语法维度 | 抽象类 | 接口 |
---|---|---|
定义关键字 | abstract | interface |
子类继承或实现关键字 | extends | implements |
方法实现 | 可以有 | 不能有,但在JDK8及以后,允许有default实现 |
方法访问控制符 | 无限制 | 有限制,默认是public abstract类型 |
属性访问控制符 | 无限制 | 有限制,默认是public static final类型 |
静态方法 | 可以有 | 不能有,但在JDK8及以后,允许有 |
static{}静态代码块 | 可以有 | 不能有 |
本类型之间扩展 | 单继承 | 多继承 |
本类型之间扩展关键字 | extends | extends |
总结
为什么接口中不能有构造方法,而抽象类中有构造方法
构造方法的使命就是在构造方法时进行传参操作
- 由此可以认为,因为接口定义时并不包含参数列表,所以接口中不能有也没必要有构造方法
- 接口只是声明,不一定要进行初始化,即使进行初始化也可以在实现接口的类中初始化
- 抽象类中需要有构造方法,是供子类创建对象时,初始化父类成员使用的
- 因为子类的构造方法中,有默认的super(),需要访问父类构造方法
参考文章
《码出高效:Java开发手册》
java接口有构造函数吗_接口为什么不能有构造函数
接口和抽象类的区别,实不相瞒,我忘记了?
同时也推荐看看这些文章
普歌-允异团队-【Java知识点】这些Java学习路上你必须知道的底层原理(1)Java类加载的机制/static、final关键字/堆、栈
普歌-逆越团队:Java基础知识点(运行背景,程序开发三步骤,入门知识点)
- 作者:CEMER216
- 本文版权归作者和CSDN共有,欢迎转载,且在文章页面明显位置给出原文链接,未经作者同意必须保留此段声明,否则保留追究法律责任的权利。