日期:2014-05-20  浏览次数:20767 次

父类的静态变量被继承后,子类修改静态变量,为什么父类的也跟着变了?
继承不是完全复制一块空间吗?
为什么改了子类继承过来的静态变量,父类的静态变量也会跟着改变呢?

代码例子如下:
Java code

class Base {
class Base {
    public static int count = 0;
}
class ClassOne extends Base {
}
public class Test {
    public static void main(String args[]) {
        System.out.println(Base.count);
        System.out.println(ClassOne.count);
        ClassOne.count++;
        System.out.println(Base.count);
    }
}




------解决方案--------------------
子类和父类是操作的同一个静态变量,
而且继承也不完全是复制一块空间,比如private的方法就不能被继承。
------解决方案--------------------
楼主的理解是不够全面的,这里你说的这种情况仅仅是因为 子类没有 与父类声明同名的static变量
我们知道static类型的变量 是归类所有,不是类的实例所有,一般用类名引用
对于你说的子类ClassOne.count++;之所以改变了父类的值,其实是是ClassOne自己没有count这个声明,这样编译器做的事情ClassOne.count++;实际是Base.count++;的效果

但是假如ClassOne有自己的count变量,那么执行ClassOne.count++;根本不影响父类的count值,两者在这个时候static的类变量独立的内存空间,互不影响,你可以执行下面的代码看看
Java code

class Base {
    public static int count = 0;
}
class ClassOne extends Base {
    public static int count=1;
}
public class Test {
    public static void main(String args[]) {
        System.out.println(Base.count);
        System.out.println(ClassOne.count);
        ClassOne.count++;
        System.out.println("Base的count值:"+Base.count);
        System.out.println("ClassOne的count值:"+ClassOne.count);
    }
}

------解决方案--------------------
是一个变量,都是从Base类得到的