Java 为什么基类中的静态变量在子类中不可访问?

Java 为什么基类中的静态变量在子类中不可访问?,java,inheritance,static,Java,Inheritance,Static,衍生 我可以使用ClassName访问它——我假设as静态变量对于类的实例是公共的。 */首先,静态变量不绑定到实例。您应该使用类名访问它们。您可以使用该对象访问它,但不建议使用它。如果使count1static的目的是在子类中访问它,则可以删除static修饰符。 其次,count1的可见性由访问修饰符决定。现在它的默认值是。这意味着它只对同一包中的类可见。所以我猜您的基类与您的子类在不同的包中 如果将其更改为受保护或public,则可以在子类中访问它 如果您确实想使其保持静态,则可以这样做,

衍生 我可以使用ClassName访问它——我假设as静态变量对于类的实例是公共的。
*/

首先,静态变量不绑定到实例。您应该使用类名访问它们。您可以使用该对象访问它,但不建议使用它。如果使
count1
static
的目的是在子类中访问它,则可以删除
static
修饰符。 其次,
count1
的可见性由访问修饰符决定。现在它的默认值是
。这意味着它只对同一包中的类可见。所以我猜您的
基类
与您的子类在不同的包中

如果将其更改为
受保护
或public,则可以在子类中访问它


如果您确实想使其保持静态,则可以这样做,但必须更改其对受保护或公共的访问权限

静态变量的定义是
而不是“实例变量”
。它们的状态可用于该类的所有实例

它们被称为类变量,通常用于保存跨类实例共享的资源。当然,在某些情况下,您必须考虑线程问题

类变量(statics)的一种用法是在
单例设计模式的实现中使用的

您可以在同一个包中的任何类中访问基类的静态变量(因为没有定义包,所以在您的示例中是默认包)。这包括包中的任何派生类。如果要使其在软件包中可用,请使用
“public”
修饰符。要访问静态变量,只需在类名前加前缀

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 

还要注意,当使用静态变量时,它们不会在派生类中继承

这对我来说很好。你能澄清到底是什么问题吗?@Mureinik--我看不到objDerivedClass.count,即我无法使用派生类中的对象获取基类中的静态变量。没有
objDerivedClass.count
,只有
objDerivedClass.count1
,你肯定可以访问它。count1本身-看不到它的包测试//无法从派生类基类{Static int count1=10;public void display(){System.out.println(“调用基类的显示方法”);}}}访问静态成员公共类SingleInheritance01扩展基类{int value=200;Static int count2=10;public Static void main(字符串args[]){SingleInheritance01 objDerivedClass=new SingleInheritance01();objDerivedClass.display();}}}对象访问是一个警告。有什么理由这样做吗?我记不起从这个方法的最上面。想知道为什么这只是一个警告而不是一个错误。
Ex: BaseClass.count1