簡體   English   中英

為什么在子 Class 中無法訪問 Base Class 中的 static 變量?

[英]Why is the static variable in Base Class not accessible in Child Class?

class BaseClass{
    static int count1=10;
    public void display(){
        System.out.println("Invoking display method of Base Class");
    }
}

public class SingleInheritance01 extends BaseClass {
    int value=200;
    static int count2=10;
    public static void main(String args[]){
        SingleInheritance01 objDerivedClass=new SingleInheritance01();
        objDerivedClass.display();
    }
}

/*
The object created in Derived Class cannot reference static variables in Base Class as well as 

派生我可以使用 ClassName 訪問它 - 我假設 static 變量對於 class 的實例是常見的。 */

首先,static 變量與實例無關。 您應該使用 Class 名稱訪問它們。 您可以使用 object 來訪問它,但不推薦。 如果創建count1 static的目的是在子 class 中訪問它,則可以刪除static修飾符。 其次, count1的可見性由訪問修飾符決定。 現在它的default 這意味着它僅對同一 package 中的類可見。 所以我的猜測是您的BaseClass與您的子類位於不同的 package 中。

如果您將其更改為protected或公開,您將能夠在子 class 中訪問它。

如果您確實想保留它 static,那么您可以這樣做,但必須將其訪問權限更改為受保護或公共

Static 變量根據定義not "instance variables" 他們的 state 可用於該 Class 的所有實例。

它們被稱為 class 變量,通常用於保存跨 class 實例共享的資源。 當然,在某些情況下,您必須考慮線程問題。

class 變量(靜態)的一種用途是在Singleton Design Pattern的實現中。

You could access static variables of the base class in any of the classes in the same package (default package in your case since no packages are defined). 這包括 package 中的任何派生類。 如果你想讓它跨包可用,請使用"public"修飾符。 要訪問 static 變量,只需在 class 名稱前添加前綴。

Ex: BaseClass.count1

另請注意,在使用 static 變量時,它們不會在派生類中繼承。

暫無
暫無

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

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