使用'这个'使用来自另一个班级的一个班级的方法。构造函数中的关键字

时间:2014-12-10 04:25:51

标签: java nested-class

我在一个类中有两个嵌套类,外部类扩展了另一个类。结构是这样的。

    public class EXTENSION_CLASS
    {
        public int Get_Value()
        {
            return(100);
        }
    }

    public class OUTER extends EXTENSION_CLASS
    {
        public static class NESTED1
        {
            public void Method1()
            {
              int value=0;
              value=Get_Value();
              System.out.println("Method1: "+value);
            }
        }
        public static class NESTED2
        {
            NESTED1 Nested1_Instance=new NESTED1();
            public void Method2()
            {
                Nested1_Instance.Method1();
            }
        }
        public void run()
        {
            NESTED2 Nested2_Instance=new NESTED2();
            Nested2_Instance.Method2();
        }
        public static void main (String[] args)
        {
           OUTER New_Class=new OUTER();
           New_Class.run();
        }
    }

我期待输出:"方法1:100"。但是,我得到输出:" OUTER.java:16:错误:非静态方法Get_Value()不能从静态上下文值= Get_Value();"中引用。我怎样才能使这个工作?

干杯!

拉​​杰什。

2 个答案:

答案 0 :(得分:1)

一种方法是在NESTED2中拥有NESTED1的实例。例如:

private static class NESTED2
  {
    private NESTED1 nested1;
    public NESTED2 (NESTED1 nested1) {
        this.nested1 = nested1;
    }
    public void Method2()
    {
      nested1.Method1();
    }
  }

答案 1 :(得分:1)

private static class NESTED2
{
  public void Method2(NESTED1 nested1Instance)
  {
   nested1Instance.Method1();
  }
}

那应该用你的班级结构来做。相反,通过这样的修改......

private static class NESTED1
{
  public *statc* void Method1()
  {
    ...
  }
}
private static class NESTED2
{
  public *static* void Method2()
  {
    NESTED1.Method1();
  }
}

......你可以逃脱没有物体的创造。

如果将方法设为静态,则不需要实例化(创建)类对象来首先调用它们。