你是正确的,这两个this和super是关键字.在Java语言规范定义明确他们必须的行为.简短的回答是这些关键字的行为特别,因为规范说它们必须.
根据规范this可以使用主表达式(仅在某些地方)或显式构造函数调用.
关键字this只能在实例方法,实例初始化程序或构造函数的主体中使用,或者在类的实例变量的初始化程序中使用.如果它出现在其他任何地方,则会发生编译时错误.
因此,您可以使用this函数的参数来传递对当前对象的引用.但是请注意,您不能super以与它不是主表达式相同的方式使用:
public class Program
{
void test(Program p) {}
void run() { test(super); }
public static void main(String[] args)
{
new Program().run();
}
}
Run Code Online (Sandbox Code Playgroud)
结果:
Program.java:5: '.' expected
void run() { test(super); }
Run Code Online (Sandbox Code Playgroud)
您可以使用,super.foo因为这在15.11中定义为有效:
FieldAccess:
Primary . Identifier
super . Identifier
ClassName .super . Identifier
Run Code Online (Sandbox Code Playgroud)
该规范还对如何使用super进行了限制:
使用关键字super的特殊表单仅在实例方法,实例初始值设定项或构造函数中有效,或在类的实例变量的初始值设定项中有效.这些与可以使用关键字的情况完全相同(§15.8.3).
| 归档时间: |
|
| 查看次数: |
3171 次 |
| 最近记录: |