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