难度
初级
学习时间
30分钟
适合人群
零基础
开发语言
Java
开发环境
- JDK v11
- IntelliJ IDEA v2018.3
提示
本教学属于系列教学,内容具有连贯性,本章使用到的内容之前教学中都有详细讲解。
1.this关键字
在了解super关键字之前,我们先来看看this关键字。
在实例方法或构造方法中,this是对当前对象的引用 - 正在调用其方法或构造方法的对象。 我们可以使用this从实例方法或构造函数中引用当前对象的任何成员。
演示:
this关键字的使用。
实现:
Student类:
Main类:
结果:
从运行结果来看,准确无误。
构造方法里面使用到this关键字,以表示当前正在调用的对象。包括get、set方法里面的字段前面省略的和未省略的this关键字。
2.super关键字
this关键字只能访问自己类中成员,如果你想访问父类中的成员,得使用super关键字。
3.访问父类中的字段
演示:
People是父类,Student是子类,Student访问People中的字段。
实现:
People类:
Student类:
Main类:
结果:
从运行结果来看,准确无误。我们可以看到无论是访问静态还是非静态变量都是可以的。
4.访问父类中的方法
演示:
People是父类,Student是子类,Student访问People中的方法。
实现:
People类:
Student类:
Main类:
结果:
从运行结果来看,准确无误。我们可以看到无论是访问静态还是非静态方法都是可以的。
5.访问父类中的构造方法
访问父类中的构造方法格式:
super();
或
super(参数列表);
super语句必须是方法体中第一条语句。
演示:
People是父类,Student是子类,Student访问People中的构造方法。
实现:
People类:
Student类:
Main类:
结果:
从运行结果来看,准确无误。
我们可以从Student类的构造方法中看出,super语句是在第一行。
注意:
如果构造方法未显式调用父类构造方法,则Java编译器会自动插入对父类的无参数构造方法的调用。 如果父类没有无参数构造方法,则会出现编译时错误。 对象确实有这样的构造方法,因此如果Object是唯一的父类,则没有问题。
例如:
People类:
Student类:
Main类:
结果:
错误信息:
文字版:
Error:(6, 8) java: People() 在 lab.People 中是 private 访问控制
错误原因就是People没有公开的构造方法,子类Student继承自People,父类必须要有一个公开的构造方法,否则就会报错。
如果子类构造方法显式或隐式地调用其父类的构造方法,您可能会认为将调用一整个构造方法链,一直回到Object的构造方法。 事实上,情况就是这样。 它被称为构造方法链。
6.子类类方法中访问父类的成员
演示:
子类Student访问父类People中的成员。
实现:
People类:
Student类:
Main类:
结果:
错误信息:
文字版:
Error:(22, 28) java: 无法从静态上下文中引用非静态 变量 super
Error:(23, 28) java: 无法从静态上下文中引用非静态 变量 super
Error:(24, 9) java: 无法从静态上下文中引用非静态 变量 super
Error:(25, 9) java: 无法从静态上下文中引用非静态 变量 super
静态方法里面只能访问静态变量和静态方法。而非静态方法里面两者都可以。
下一章我们将继续探讨继承中特性:字段在继承中的变化。
总结
- super关键字只能运用在继承中。
- 调用父类的实例变量和类变量:super.变量名
- 调用父类的实例方法和类方法:super.方法
- 不推荐使用super调用父类的类方法,推荐使用父类的类名调用类方法。
- 如果构造方法未显式调用父类构造方法,则Java编译器会自动插入对父类的无参数构造方法的调用。
- 如果父类没有无参数构造方法,则会出现编译时错误。 对象确实有这样的构造方法,因此如果Object是唯一的父类,则没有问题。
- 如果子类构造方法显式或隐式地调用其父类的构造方法,您可能会认为将调用一整个构造方法链,一直回到Object的构造方法。 事实上,情况就是这样。 它被称为构造方法链。
至此,Java中super关键字相关内容讲解先告一段落,更多内容请持续关注。
答疑
如果大家有问题或想了解更多前沿技术,请在下方留言或评论,我会为大家解答。
上一章
下一章
“全栈2019”Java第四十六章:继承与字段
学习小组
加入同步学习小组,共同交流与进步。
- 方式一:关注头条号Gorhaf,私信“Java学习小组”。
- 方式二:关注公众号Gorhaf,回复“Java学习小组”。
全栈工程师学习计划
关注我们,加入“全栈工程师学习计划”。
版权声明
原创不易,未经允许不得转载!