【问题标题】:Using a non static data member in to a non static nested class withourt using object在不使用对象的情况下在非静态嵌套类中使用非静态数据成员
【发布时间】:2015-05-31 05:25:48
【问题描述】:
class Outer
{
    int x=10;
    class Inner
    {
        void show()
        {
            System.out.println(x);
        }
    }
    public static void main(String args[])
    {
        Outer obj=new Outer();
        Inner obj1=new Outer().new Inner();
        obj1.show();
    }
}

我尝试制作一个非静态嵌套类,并尝试在非静态内部类中使用外部类的非静态数据成员。我不明白如果 x 是非静态的,我如何在没有对象的情况下使用它。请给我答案?

【问题讨论】:

  • 从您的问题中并不清楚问题是什么。你能澄清一下吗?
  • 你知道什么是内部类吗?
  • 我的问题很简单,如果 x 是非静态的,那么我如何在没有任何对象的情况下使用它。
  • 和@SotiriosDelimanolis 我知道嵌套类是什么,这就是我问这个问题的原因。
  • @ManishKumar 答案很简单:Inner 也不是静态的。

标签: java nested-class non-static


【解决方案1】:

在没有对象的情况下使用它。内部(非静态嵌套)类具有对外部对象的引用,其 x 被使用。

【讨论】:

  • 但我读到内部类与外部类没有关系,所以它们如何引用外部类
  • 嵌套类没有。
  • @SotiriosDelimanolis 静态嵌套不要。内部(非静态嵌套)做。
【解决方案2】:

内部类只是隐式引用外部类的语法糖。在内部(javac 编译后)你的类Inner 看起来像这样:

static class Inner
{
    private final Outer this$0;

    public Inner(Outer outer) {
        this$0 = outer;
    }

    void show()
    {
        System.out.println(this$0.x);
    }
}

当您编写 Inner obj1=new Outer().new Inner(); 时,编译器会将其更改为 Inner obj1=new Inner(new Outer());

【讨论】:

    猜你喜欢
    • 2016-05-20
    • 2011-10-17
    • 2021-10-06
    • 1970-01-01
    • 2012-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多