繁体   English   中英

如何从嵌套类访问Extended Class的方法?

[英]How to access a method of Extended Class from 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();
    }
}

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

干杯!

拉杰什。

NESTED1NESTED2的声明中删除static修饰符,如下所示:

public class NESTED1

您正在尝试对非静态成员进行static引用。

这意味着您正在尝试从类的静态成员访问实例成员。

要解决此问题,请从NESTED1和NESTED2分支中删除static修饰符。

或者,如果您不想删除static修饰符,则必须创建OUTEREXTENSION_CLASS类的对象,然后使用该对象调用Get_Value()。

例如:

public void Method1()
{
      int value=0;
      EXTENSION_CLASS ext = new EXTENSION_CLASS ();
      value=ext.Get_Value();
      System.out.println("Method1: "+value);
}

要么

public void Method1()
{
      int value=0;
      OUTER outer = new OUTER();
      value=outer.Get_Value();
      System.out.println("Method1: "+value);
}

如果要将嵌套类保持为静态,则必须在Method1()中创建OUTER实例以访问Get_Value()。

  public void Method1()
    {
      int value=0;
       OUTER outer = new OUTER();
       value=outer.Get_Value();
      System.out.println("Method1: "+value);
    }

错误说明了每一件事。 您不能从静态方法/类中调用非静态方法。 要使其工作,只需在EXTENSION_CLASS中将静态关键字添加到'Get_Value'方法即可。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM