三个类,类C继承类A,类C是main()入口,为何类C的数据成员puc1、prc1必须是static的,才能执行System.out.println("puc1:"+puc1+",prc1:"+prc1);而在类A/B里则不用将数据成员定义为static,也能执行类似打印语句package test61;public class A{
public int pua1;
private int pra1;
public A(){
pua1 = 1;
pra1 = 81;
System.out.println("pua1:"+pua1+",pra1:"+pra1);
}
}package test61;public class B{
public int pub1;
private int prb1;
public B(){
pub1 = 2;
prb1 = 82;
System.out.println("pub1:"+pub1+",prb1:"+prb1);
}
public void prt(){
System.out.println("pub1:"+pub1+",prb1:"+prb1);
}
}
package test61;public class C extends A{
public static int puc1 = 3;
private static int prc1 = 83;
public static void main(String[] args){
B b1 = new B();
C c1 = new C();
System.out.println("b1.pub1:"+b1.pub1);
System.out.println("c1.pua1:"+c1.pua1);
System.out.println("puc1:"+puc1+",prc1:"+prc1);
}
}

解决方案 »

  1.   

    补充,是java1.6的,在eclipse编译。
      

  2.   

    那为何类B的ystem.out.println("pub1:"+pub1+",prb1:"+prb1);可以处理pub1、pub1,这两个不是动态变量吗?
      

  3.   

    应为main方法是static 的,是先于C类被初始化的,如果puc1 不是static 的话,那不是它还没有被初始化就被main方法调用了?所以必须是static的
      

  4.   

    因为public B()、public void prt()都不是静态方法
      

  5.   

    因为A、B用了对象去访问对象的一个成员
    如果你也有一个C的对象,比如在main函数中有这条语句:C c = new C();
    然后再System.out.println("puc1:"+c.puc1+",prc1:"+c.prc1);
    这样是可以的而现在没有C的对象也可以直接打印出puc1和prc1是因为在一个类得静态方法(这里是main方法)中是可以随便访问该类的class variable(就是那些有static修饰的成员变量)的