你是正确的,这两个
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(); }}结果:
Program.java:5: '.' expected void run() { test(super); }super.foo尽管可以使用,因为这在15.11中定义为有效:
FieldAccess: Primary . Identifier super . Identifier ClassName .super . Identifier
该规范还对如何使用super施加了限制:
使用关键字super的特殊形式仅在实例方法,实例初始化器或构造函数中或在类的实例变量的初始化器中有效;在完全相同的情况下,可以使用关键字this(第15.8.3节)。



