当前位置: 首页 > 知识库问答 >
问题:

如何访问类范围之外但在父类范围内的变量?[重复]

司徒运锋
2023-03-14

我有一个考试示例,它询问我是否可以访问包含值1的x变量?解决方案是我可以,但我感兴趣的是具体怎么做?

class A {
    int x = 1; //this is what I need access to.
    class B {
        int x = 2;
        void func(int x) {...}
    }
}

共有3个答案

孟昊空
2023-03-14

是的,您可以访问值为1的变量x。

这里A是您的外部类,B是非静态内部类。

要访问外部类A的变量x,你可以这样做

class B {
    int x = 2;
    void func(int x) {
      System.out.print(A.this.x +"  and  "+x);
    }
}
卜方伟
2023-03-14

要访问父实例,您可以使用this关键字,如ParentClassName.this

子类不能是静态的

洪弘亮
2023-03-14
class A {
    int x = 1;

    class B {
        int x = 2;

        void func(int x) {
            System.out.println(A.this.x);
        }
    }
}

使用示例:

public class Main {
    public static void main(String[] args) {        
        A a = new A();
        A.B b = a.new B();

        b.func(0); // Out is 1
    }
}
 类似资料:
  • 问题内容: 我知道变量作用域由块的开始和块的结尾包围。如果在块内声明了相同的变量,则会发生编译错误。但是,请看以下示例。 在这里,可以在方法中重新声明,尽管它已经在类中声明了。但是在块中,无法重新声明。 为什么类范围变量的重新声明不产生错误,而方法范围变量的重新声明却产生错误? 问题答案: 这是因为不是变量,而是实例字段。允许局部变量与字段具有相同的名称。为了区分变量和具有相同名称的字段,我们在实

  • 问题内容: 我知道变量作用域由块的开始和块的结尾包围。如果在块内声明了相同的变量,则会发生编译错误。但是,请看以下示例。 在这里,可以在方法中重新声明,尽管它已经在类中声明了。但是在块中,无法重新声明。 为什么类范围变量的重新声明不产生错误,而方法范围变量的重新声明却产生错误? 问题答案: 这是因为不是变量,而是实例字段。允许局部变量与字段具有相同的名称。为了区分变量和具有相同名称的字段,我们在实

  • 问题内容: 在或中时,将更改的范围。您如何访问调用范围? 问题答案: 记录在文本/模板文档中: 开始执行时,将$设置为传递给Execute的数据参数,即dot的起始值。

  • 问题内容: 在类中声明变量(在函数外部):所有类函数都可以访问它(基本上是公共变量) 在类内的函数内声明变量:只有该函数才能访问它(在该函数范围内) 在类内的函数内部声明带有self。(变量名)的变量:所有类函数都可以访问它(这与全局变量名有何不同?) 并且由于没有私有/受保护的事物,所以所有事物都是公共的,因此可以从类外部访问所有可以从类内部访问的事物。 我还有其他细微差别应该知道吗? 问题答案

  • 本章介绍当模板在访问变量时发生了什么事情,还有变量是如何存储的。 当调用 Template.process 方法时,它会在方法内部创建一个 Environment 对象,在 process 返回之前一直使用。 该对象存储模板执行时的运行状态信息。除了这些,它还存储由模板中指令,如 assign, macro, local 或 global 创建的变量。 它不会尝试修改传递给 process 的数据

  • 问题内容: 我有这个模板,页面顶部有一个表格,要求发送的任何一篇帖子中的threadID(它们都是相同的,都是带有特定threadID的所有帖子的一部分),这显然不是工作,我唯一的想法是 如果以上任何一个不清楚,这里是Post的结构和方法。 并将切片的起源发送到模板 问题答案: 您可以将其作为一个结构传递,如下所示: 然后像这样的东西会工作