所以我们大多数人都知道如何从内部类访问外部类.使用这些词语进行搜索可以提供有关该主题的大量回答问题.但我想知道的是为什么语法是这样的.
例:
public class A
{
private class B
{
public void c()
{A.this.d();}
public void d()
{System.out.println("You called the d() in the B class! Oh noes!");}
}
public void d()
{System.out.println("You've called d()! Go, you!");}
}
Run Code Online (Sandbox Code Playgroud)
为什么A.this.d()
?它看起来像是this
A类的静态字段,但是......*很困惑*
如果这是重复,请原谅我; 就像我说的那样,用这些词搜索会给出答案.
非静态内部类始终与外部类的特定实例相关联.该A.this
语法正是指此实例的方式.我想不出任何其他更简单或更清晰的方法.当我看到这种语法时,我的第一反应是"哎哟,丑陋",但是当我稍微谈论它时,我意识到它非常整洁.
(是的,它看起来像访问一个静态字段,但是再次,你不能有一个静态字段this
,所以它不含糊.)
为什么要这样做?确实,这只是因为它本来的样子。它有效,有点道理,而且不需要想出花哨的语法来完成这项工作。
当你看到这样的东西时:
x.y.z
Run Code Online (Sandbox Code Playgroud)
这.
可能意味着很多事情:
换句话说,重载了.
Java编程语言中的许多语法功能。这可能会导致混乱,并且可能会出现问题,但事实就是如此。
它有助于遵循命名约定,但某些事情仍然可能看起来不明确和/或令人困惑。