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

如何从内部类对象访问外部类的方法和全局变量,如果不能,拥有内部类的目的是什么

东郭元魁
2023-03-14
public class StaticAndInnerClasses {
    String testString;
    class InnerClass{
    int x;
    int y;


    }
    static class InnerStaticClass{
    int a=10;
    int b=20;

    }
    public void changeCharacter(){
    testString="Characters modified";
    }
    public static void main(String[] args){
    StaticAndInnerClasses.InnerStaticClass statciClassObject=new StaticAndInnerClasses.InnerStaticClass();
    StaticAndInnerClasses outerObject=new StaticAndInnerClasses();
    outerObject.changeCharacter();
    InnerClass innerClassObject=outerObject.new InnerClass();    
    innerClassObject.changeCharacter();   



  }
    }

共有1个答案

艾心远
2023-03-14

内部类中的代码可以引用外部类中的内容。

对于这个玩具示例:

public class StaticAndInnerClasses {
    String testString;
    class InnerClass{
        int x;
        int y;

        public void printString() {
            changeCharacter();
            System.out.println(testString);
        }
    }

    static class InnerStaticClass{
        int a=10;
        int b=20;

    }
    public void changeCharacter(){
        testString="Characters modified";
    }

    public static void main(String[] args){
        StaticAndInnerClasses.InnerStaticClass statciClassObject=new StaticAndInnerClasses.InnerStaticClass();
        StaticAndInnerClasses outerObject=new StaticAndInnerClasses();
        StaticAndInnerClasses.InnerClass innerClassObject=outerObject.new InnerClass();
        innerClassObject.printString();

    }
}

因此,在内部类的代码中,可以引用外部类的方法和字段,就像在方法printstring()中所做的那样。这不会将外部类方法转换为内部类的方法,因此代码(在外部类main)

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

  • 问题内容: 嗨,我正在浏览有关内部类的SCJP书,发现了这一说法,类似这样。 方法本地类只能引用已标记的本地变量 在解释中,指定的原因与本地类对象和堆上的局部变量的范围和生存期有关,但我无法理解。我在这里想念任何东西吗? 问题答案: 原因是,在创建方法本地类实例时,编译器实际上会将其引用的所有方法本地变量复制到其中。这就是为什么只能访问变量的原因。甲变量或参考是不变的,所以它停留在同步与其方法本地

  • 问题内容: 这不是直截了当的问题。在我的情况下,外部类变量和内部类setter方法的参数名称相同。喜欢: 现在,我无法初始化外部类实例变量p,因为它指示内部类。再次,我做不到它得到一个错误。现在如何分配外部p,同时将内部Class方法的参数命名为p? 问题答案: 这是您可以/应该这样做的方式:

  • 这不是直截了当的问题。在我的例子中,外部类变量和内部类setter方法的参数名称是相同的。比如: 现在我不能用初始化外部类实例变量p,因为它指示内部类。同样,我不能执行会出现错误。现在,我如何分配外部p,使内部类方法的参数与名称p相同?

  • 问题内容: 在内部类中,可以访问外部类的变量,但不能访问方法的局部变量。我了解了无法访问方法的局部变量的部分,但我想知道为什么外部类变量可以访问? 我的理解是,由于内部类与外部类绑定,因此只要父级可用,子级就可以访问其父级变量。我对么? 问题答案: 假设您的外部类在内部类的范围内(非静态)被称为,以获取该字段。 例如, 其中Outer是类的名称,并标识该字段。 您也可以直接抓取它,但是如果由于阴影

  • 在内部类中,外部类的变量是可访问的,但方法的局部变量不是。我理解了关于方法的局部变量不可访问的部分,但我想知道为什么外部类变量是可访问的? 我的理解是,由于内部类与外部类绑定,因此只要父类可用,子类就可以访问其父变量。我说得对吗?