“全栈2019”Java第四十五章:super关键字

154 阅读5分钟
原文链接: www.toutiao.com

难度

初级

学习时间

30分钟

适合人群

零基础

开发语言

Java

开发环境

  • JDK v11
  • IntelliJ IDEA v2018.3

提示

本教学属于系列教学,内容具有连贯性,本章使用到的内容之前教学中都有详细讲解。

1.this关键字

在了解super关键字之前,我们先来看看this关键字。

在实例方法或构造方法中,this是对当前对象的引用 - 正在调用其方法或构造方法的对象。 我们可以使用this从实例方法或构造函数中引用当前对象的任何成员。

演示:

this关键字的使用。

实现:

Student类:

“全栈2019”Java第四十五章:super关键字

Main类:

“全栈2019”Java第四十五章:super关键字

结果:

“全栈2019”Java第四十五章:super关键字

从运行结果来看,准确无误。

构造方法里面使用到this关键字,以表示当前正在调用的对象。包括get、set方法里面的字段前面省略的和未省略的this关键字。

2.super关键字

this关键字只能访问自己类中成员,如果你想访问父类中的成员,得使用super关键字。

3.访问父类中的字段

演示:

People是父类,Student是子类,Student访问People中的字段。

实现:

People类:

“全栈2019”Java第四十五章:super关键字

Student类:

“全栈2019”Java第四十五章:super关键字

Main类:

“全栈2019”Java第四十五章:super关键字

结果:

“全栈2019”Java第四十五章:super关键字

从运行结果来看,准确无误。我们可以看到无论是访问静态还是非静态变量都是可以的。

4.访问父类中的方法

演示:

People是父类,Student是子类,Student访问People中的方法。

实现:

People类:

“全栈2019”Java第四十五章:super关键字

Student类:

“全栈2019”Java第四十五章:super关键字

Main类:

“全栈2019”Java第四十五章:super关键字

结果:

“全栈2019”Java第四十五章:super关键字

从运行结果来看,准确无误。我们可以看到无论是访问静态还是非静态方法都是可以的。

5.访问父类中的构造方法

访问父类中的构造方法格式:

super();

super(参数列表);

super语句必须是方法体中第一条语句。

演示:

People是父类,Student是子类,Student访问People中的构造方法。

实现:

People类:

“全栈2019”Java第四十五章:super关键字

Student类:

“全栈2019”Java第四十五章:super关键字

Main类:

“全栈2019”Java第四十五章:super关键字

结果:

“全栈2019”Java第四十五章:super关键字

从运行结果来看,准确无误。

我们可以从Student类的构造方法中看出,super语句是在第一行。

注意:

如果构造方法未显式调用父类构造方法,则Java编译器会自动插入对父类的无参数构造方法的调用。 如果父类没有无参数构造方法,则会出现编译时错误。 对象确实有这样的构造方法,因此如果Object是唯一的父类,则没有问题。

例如:

People类:

“全栈2019”Java第四十五章:super关键字

Student类:

“全栈2019”Java第四十五章:super关键字

Main类:

“全栈2019”Java第四十五章:super关键字

结果:

“全栈2019”Java第四十五章:super关键字

错误信息:

“全栈2019”Java第四十五章:super关键字

文字版:

Error:(6, 8) java: People() 在 lab.People 中是 private 访问控制

错误原因就是People没有公开的构造方法,子类Student继承自People,父类必须要有一个公开的构造方法,否则就会报错。

如果子类构造方法显式或隐式地调用其父类的构造方法,您可能会认为将调用一整个构造方法链,一直回到Object的构造方法。 事实上,情况就是这样。 它被称为构造方法链。

6.子类类方法中访问父类的成员

演示:

子类Student访问父类People中的成员。

实现:

People类:

“全栈2019”Java第四十五章:super关键字

Student类:

“全栈2019”Java第四十五章:super关键字

Main类:

“全栈2019”Java第四十五章:super关键字

结果:

“全栈2019”Java第四十五章:super关键字

错误信息:

“全栈2019”Java第四十五章:super关键字

文字版:

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第四十四章:继承

下一章

“全栈2019”Java第四十六章:继承与字段

学习小组

加入同步学习小组,共同交流与进步。

  • 方式一:关注头条号Gorhaf,私信“Java学习小组”。
  • 方式二:关注公众号Gorhaf,回复“Java学习小组”。

全栈工程师学习计划

关注我们,加入“全栈工程师学习计划”。

“全栈2019”Java第四十五章:super关键字

版权声明

原创不易,未经允许不得转载!