java中的this和super

最近经常看到有人把this和super都看作是对象的引用,但是在学习《Java核心技术 卷I 基础知识》(原书第10版)的时候,发现并不是这样的,因此在这里对书中的相关内容稍作梳理。以下的内容主要参考自《Java核心技术 卷I 基础知识》(原书第10版)的第108页、第126页和第149~150页。

this

1、this表示隐式参数

首先java中的参数分为隐式参数(implicit)和显示参数(explicit)。隐式参数是出现在方法名前的调用该方法的类的对象,显示参数就是位于方法名后面括号中的数值。也就是说在定义方法时,显示参数是明显地列在方法声明中的,隐式参数并没有出现在方法声明中。

在每一个方法中,关键字this表示隐式参数。

2、this调用另一个构造器

如果构造器的第一个语句形如this(...),这个构造器将调用同一个类的另一个构造器。

super

1、调用超类中的方法

使用特定的关键字super可以调用超类中的某个方法,但这并不意味着super同this引用是类似的概念。实际上,super并不是一个对象的引用,不能将super赋给另一个对象变量,它只是一个只是编译器调用超类方法的特殊关键字。

2、super调用超类的构造器

由于子类不能访问超类的私有域,所以必须利用超类的构造器对这部分私有域进行初始化,我们可以通过super实现对超类构造器的调用。

如果子类的构造器没有显示地调用超类的构造器,则将自动地调用超类默认(没有参数)的构造器。如果超类没有不带参数的构造器,并且在子类的构造器中没有显示地调用超类的其他构造器,Java编译器将报告错误。

总结

关键字this有两个用途:
1、引用隐式参数
2、调用该类的其他构造器

关键字super也有两个用途
1、调用超类的方法
2、调用超类的构造器

在调用构造器的时候,这两个关键字的使用方式很相似,调用构造器的语句只能作为另一个构造器的第一条语句出现。

一个问题

在学习后面的过程中又发现了一个问题让我用以上super的两个用途好像没能解释明白,就是接口名.super.默认方法,在这个调用接口中某一个默认方法的语句中,super的用途类似于调用超类的方法吗,那为什么还要在前面加上接口名呀?

原文地址:https://www.cnblogs.com/mryx/p/13082638.html