簡體   English   中英

如何使用內部靜態類對象訪問外部類變量

[英]How to access outer class variable using inner static class object

我正在用Java學習內部類。 我已經看到,如果內部類是非靜態的,則可以輕松訪問外部類變量。 但是,如果內部類是靜態的,那如何使用靜態的class對象訪問外部類的變量呢?

下面是我的代碼,其中從內部類訪問外部類變量

package org;

public class Outerclass {

     String name = "Europe";

    public String getname() {

        return name;
    }

    public void setname(String name) {

        this.name = name;
        System.out.println(this.name);
    }

    static class innerclass {

        void updatename() {
            Outerclass o = new Outerclass();
            o.setname("USA");
        }

    }

    public static void main(String[] args) {
        Outerclass b = new Outerclass();
        b.name; // why this error here ? "Syntax error, insert "VariableDeclarators" to complete LocalVariableDeclaration"

        innerclass i = new innerclass();
        i.updatename();

    }

}

您無法訪問靜態內容內的非靜態內容

默認情況下,當我們創建靜態內部類時,它將作為外部模板創建為內部模板的關聯。 因此,我們可以將兩者加載在一起,但是只有靜態的東西才能在靜態內部類中。

現在,類的對象之間沒有連接。 但是模板之間有聯系。

以下是您的代碼,我做了一些修改可能會幫助您

public class Demo {

     String name = "Europe";

    public String getname() {

        return name;
    }

    public void setname(String name) {

        this.name = name;
        System.out.println(this.name);
    }

    static class innerclass {

        void updatename() {
            Demo o = new Demo();
            o.setname("USA");
        }

    }

    public static void main(String[] args) {
        Demo b = new Demo();
        String a = b.name; // why this error here ? "Syntax error, insert "VariableDeclarators" to complete LocalVariableDeclaration"

        System.out.println(a);

        innerclass i = new innerclass();
        i.updatename();

    }

}

內部靜態類行為與普通類相同:

  • 可以訪問外部類的靜態屬性/方法
  • 不能直接訪問外部類的static /方法,它們將需要外部類實例引用來這樣做。
  • 它不需要要創建的外部類的實例

它主要用於兩種情況

  • 您正在創建一組性質/功能相似的類,並且希望將它們保留在一個“ Napespace”下
  • 您想要創建一個私有類,除了外部類(私有靜態內部類)之外,其他任何人都看不到。 這樣,您可以創建僅對外部類可見的接口實現。

非靜態內部類:

  • 它需要創建外部類的實例
  • 它可以訪問外部類的方法和屬性。

引用

...內部類可以訪問聲明類的所有成員,甚至是私有成員。 實際上,內部類本身就是該類的成員。 因此,遵循面向對象工程的規則,它應該有權訪問該類的所有成員。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM