interface A{
int x=0;
}
class B{
int x=1;
}
class C extends B implements A{

static int x=2;
public void pX(final int x){
//int x=3;
System.out.println(x);
} public static void main(String[] args){
new C().pX(super.x);
}
}
Cannot use super in a static context , 为什么?

解决方案 »

  1.   

    super,this等都是用于非静态成员的。
      

  2.   

    因为静态方法隶属于整个类,没有对象也可以调用,而非静态方法只能从对象上调用。
    比如类A又静态方法f和非静态方法g,那么调用f可以直接
    A.f();
    而调用g则必须:
    A a;
    a.f();
      

  3.   

    当然,以上只是从道理上解释一下原因。
    从简单的角度说,“静态方法不能调用非静态成员”这是Java语法规定的,违反语法的事当然编译器不会允许的。
      

  4.   

    我记得super只能在构造函数中用。别的地方不行。
      

  5.   

    class A{
        void f1(){}
        }public class B extends A{
        void f2(){super.f1();}
    }
      

  6.   

    干吗从stack和heap的角度说啊?
      

  7.   

    当一个创建一个子类的对象时,子类的对象里面会自动创建一个父类的对象,就是说子类对象总是包含一个父类的对象,而这个父类的对象就是通过super这个关键字指向的。当这里你应该知道这super是与对象相关的,就不可能是static的,所以你不能在static的main方法中使用super。