从内部类访问外部类:为什么这样做?

ama*_*ara 7 java syntax

所以我们大多数人都知道如何从内部类访问外部类.使用这些词语进行搜索可以提供有关该主题的大量回答问题.但我想知道的是为什么语法是这样的.

例:

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()?它看起来像是thisA类的静态字段,但是......*很困惑*

如果这是重复,请原谅我; 就像我说的那样,用这些词搜索会给出答案.

Jes*_*erE 5

非静态内部类始终与外部类的特定实例相关联.该A.this语法正是指此实例的方式.我想不出任何其他更简单或更清晰的方法.当我看到这种语法时,我的第一反应是"哎哟,丑陋",但是当我稍微谈论它时,我意识到它非常整洁.

(是的,它看起来像访问一个静态字段,但是再次,你不能有一个静态字段this,所以它不含糊.)


pol*_*nts 2

为什么要这样做?确实,这只是因为它本来的样子。它有效,有点道理,而且不需要想出花哨的语法来完成这项工作。

当你看到这样的东西时:

x.y.z
Run Code Online (Sandbox Code Playgroud)

.可能意味着很多事情:

  • 分包分隔符
  • 会员字段访问
  • 嵌套式分隔符

换句话说,重载了.Java编程语言中的许多语法功能。这可能会导致混乱,并且可能会出现问题,但事实就是如此。

它有助于遵循命名约定,但某些事情仍然可能看起来不明确和/或令人困惑。

也可以看看