Java错误:无法从静态上下文引用非静态变量

时间:2017-07-11 15:21:14

标签: java class compilation super

这是给定的代码:

class Super {
    protected int n;

    Super(int n){
        this.n=n;
    }

    public void print(){
        System.out.println("n="+n);
    }
}

class Sub {
    Sub(int m){
        Super.n=m;
    }
}

class Test{
    public static void main(String[] args){
        Sub s= new Sub(10);
        s.print();
    }
}

我收到了这些错误:

  

Main.java:19:错误:无法从静态上下文引用非静态变量n       Super.n =米;
      ........... ^
  Main.java:25:错误:找不到符号
          短跑();

有人可以告诉我为什么会出现这些错误吗?

2 个答案:

答案 0 :(得分:1)

您的问题是Sub类:

class Sub {
    Sub(int m){
        Super.n=m; // <- this line of code!
    }
}

Super.n是一种访问类范围中定义的变量的语法。在java中,我们称这种变量为静态变量。

要解决此问题,您必须执行以下操作:

// With the extends Super, you are inheriting properies and methods
// from Super class
class Sub extends Super {
    Sub(int m){
        // Now you are calling a constructor from the parent             
        super(m);
    }
}

答案 1 :(得分:0)

Sub需要实际继承Super

public class Sub extends Super可以使Sub。

访问Super的变量

语言参考:

Inheritance in Java