super关键字
# 概述
在Java类中使用super来调用父类中的指定操作:
super
可用于访问父类中定义的属性super
可用于调用父类中定义的成员方法super
可用于在子类构造器中调用父类的构造器
# 使用
super的使用
- 可以在子类的方法或构造器中,通过使用
super.属性
或super.方法
的方法是,显式调用父类中声明的属性或方法。但是通常情况下,我们习惯省略super
- 特殊情况:当子类和父类定义同名的属性时,我们想要在子类中调用父类中声明的属性,则必须显式的使用
super.属性
的方式,表明调用的是父类中声明的属性。
# 注意
- 尤其当子父类出现同名成员时,可以用
super
表明调用的是父类中的成员 super
的追溯不仅限于直接父类,当在子类中调用继承的属性或者方法时,会自动从父类中寻找相应的属性或方法,如果父类没有,就会继续向父类的父类寻找,除非不存在这个方法,那么肯定能找到。super
和this
的用法相像,this
代表本类对象的引用,super
代表父类的内存空间的标识
# 底层
super
调用父类的构造器
- 我们可以在子类的构造器显式的使用
super(参数列表)
的方式,调用父类中声明的指定的构造器。 - 子类中所有的构造器默认都会访问父类中空参数的构造器
- 当父类中没有空参数的构造器时,子类的构造器必须通过
this(参数列表)
或者super(参数列表)
语句指定调用本类或者父类中相应的构造器。同时,只能”二选一”,且必须放在构造器的首行 - 在类的多个构造器中,至少有一个类的构造器使用了
super(参数列表)
调用父类中的构造器。 - 如果子类构造器中既未显式调用父类或本类的构造器,且父类中又没有无参的构造器,则编译出错
this和super的区别
No | 区别点 | this | super |
---|---|---|---|
1 | 访问属性 | 访问本类中的属性,如果本类中没有此属性则从父类中继续查找 | 直接访问父类中的属性 |
2 | 调用方法 | 访问本类中的方法,如果本类中没有此方法则从父类中继续查找 | 直接访问父类中的方法 |
3 | 调用构造器 | 调用本类构造器,必须放在构造器的首行 | 调用父类构造器,必须放在子类构造器的首行 |
帮我改善此页面 (opens new window)
上次更新: 2020/12/18, 12:50:58