父类的静态变量被继承后,子类修改静态变量,为什么父类的也跟着变了?解决思路
父类的静态变量被继承后,子类修改静态变量,为什么父类的也跟着变了?
继承不是完全复制一块空间吗?
为什么改了子类继承过来的静态变量,父类的静态变量也会跟着改变呢?
代码例子如下:
------解决方案--------------------
子类和父类是操作的同一个静态变量,
而且继承也不完全是复制一块空间,比如private的方法就不能被继承。
------解决方案--------------------
楼主的理解是不够全面的,这里你说的这种情况仅仅是因为 子类没有 与父类声明同名的static变量
我们知道static类型的变量 是归类所有,不是类的实例所有,一般用类名引用
对于你说的子类ClassOne.count++;之所以改变了父类的值,其实是是ClassOne自己没有count这个声明,这样编译器做的事情ClassOne.count++;实际是Base.count++;的效果
但是假如ClassOne有自己的count变量,那么执行ClassOne.count++;根本不影响父类的count值,两者在这个时候static的类变量独立的内存空间,互不影响,你可以执行下面的代码看看
继承不是完全复制一块空间吗?
为什么改了子类继承过来的静态变量,父类的静态变量也会跟着改变呢?
代码例子如下:
- 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类得到的