java的父类static疑问
父类有一个static变量,子类是如何继承的。比如
package test;
class P {
public static int i = 5;
}
class C1 extends P {
}
class C2 extends P {
}
public class TestStaticExtends {
public static void main(String[] args) {
System.out.println(P.i);
System.out.println(C1.i);
System.out.println(C2.i);
C1.i = 6;
System.out.println(P.i);
System.out.println(C1.i);
System.out.println(C2.i);
}
}
后来的3个输出是6 为什么,子类不是应该有子类的static吗
答案:①楼说的很笼统
②楼说的很对,但我感觉不是楼主想要的那部分
下面我说说我的见解,应该是你疑惑的:
说句没用的,看出楼主也是新手,这些搞不明白也没什么丢人的,谁都是一步步走过来的。
静态变量的特性就是,在程序的生命周期内,他一旦被使用,就将一直存在下去,子类C1C2其实都是继承父类P,而 i ,父类P的一个静态变量,是属于整个类的,而不是个别实例(子类亦如此),
就好比,父类P为两个儿子C1C2和自己开了一个账户用于三个人存钱取钱用,C1C2是P的孩子,也可以用这个账户,是大家公有的,如果有任何一个人取走了存折里的钱或者向里面存钱,这个账户的金额就会变化,变化后,当父亲或者两个孩子再去取钱的时候,是不是钱已经变了呢?
其他:先搞懂static变量吧,你这个列子和继承没多大关系 你只在父类有静态变量i,而子类没有这个变量,所以当你在子类进行赋值的时候,他在本类没有找到,去找的是父类的变量,赋值也是赋值给父类。由于C1,C2继承了这个父类,所获得的值,就都是赋过值的i了。
备注:子类大于父类,如果你在子类有变量i,那么那就会覆盖继承效果,赋值也就影响不到父类了。 子类可以继承父类所有的 public protectad 锈蚀的方法 所以说你程序中c1、和c2所指向的地址都是p中的i. 所以说当c1.i=6是其实就是将 p中的i进行了修改。所以此时p.i的值就变成了6.而c2.i正好也指向了p.i 所以 c2.i也就变成了6.这与 static 修饰无关 静态只属于父类 关子类毛事 言下之意 静态的与继承无关 只与对应类有关 不会被继承
上一个:javascript 原型继承的问题
下一个:java 一个类 继承 Frame,然后再paint方法里面死循环画图,这样是不是就没有办法关闭窗口了?(易做图无用)