当前位置: 首页 > 面试题库 >

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

喻增
2023-03-14
问题内容

因此,我们大多数人都知道 如何 从内部类访问外部类。用这些词进行搜索会给出关于该主题的大量回答问题。但是我想知道的是为什么语法是这样。

例:

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!");}
}

为什么呢A.this.d()?看起来this是A类的静态字段,但是… 感到困惑

如果这是重复的话,请原谅我。就像我说的那样,用这些词进行搜索会给出操作答案。


问题答案:

为什么这样做呢?真的,只是因为它的方式。它行之有效,从某种意义上讲,并且不需要花哨的语法来完成这项工作。

当您看到类似以下内容的内容:

x.y.z

.可能意味着很多东西:

  • 子包装分隔符
  • 会员领域访问
  • 嵌套式分隔符

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

遵循命名约定很有帮助,但是某些事情仍然看起来模棱两可和/或令人困惑。

也可以看看

  • 太阳命名约定
  • JLS 6.5确定名称的含义
    • 本节有许多示例说明如何解析名称


 类似资料:
  • 问题内容: 如何从内部类访问外部类? 我正在重写一种使它在不同线程上运行的方法。从内联线程中,我需要调用原始方法,但是当然只要调用就会变成无限递归。 具体来说,我在扩展BufferedReader: 这个地方给了我我找不到的NullPointerException。 谢谢。 问题答案: 像这样: 上面的测试在执行时显示:

  • 我正在做下面这样的事情,但它不起作用。为什么?又是如何做到的呢?

  • 问题内容: 在下面显示的代码片段中,内部类本身继承了外部类。 方法中的唯一语句(最后一个片段)将值分配给类的私有字段,然后调用该方法。 该方法会导致另一个字符串- 要设置的私人领域中的类调用之前的方法延长。 因此,方法中的以下两个语句: 应该显示 另一个价值 另一个价值 但是他们显示 初始值 初始值 为什么会这样? 问题答案: 方法和领域都是。因此,其他子类(包括子类)均无法访问它们。它们不是继承

  • 这是我正在研究的一个更大问题的一个简短的子问题。 为什么我不能通过第8行outer class中的inner class的实例访问outer类字段? 字段在内部类中可见。 外部类中的非静态方法仍然存在此问题。 字段的可见性并不重要。无论从哪种方式,它都可以从内部类中看到。 可以通过内部类中的(私有)getter访问该字段,但我出现问题的原因之一是,我希望避免这些。 它应该成为不可变的构建器模式的一

  • 问题内容: 是否可以从Java内部类中获取对它的引用? 即 问题答案: 您可以像这样访问外部类的实例:

  • 但是,如果我在内部类中声明了一个同名的variabe呢?有什么方法可以显式引用外部变量吗? 顺便说一句,这和这个问题不同,因为它考虑的是局部堆栈变量。