簡體   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