2017-07-11 1 views
-2

Hier ist die angegebene Code verwiesen werden:Java-Fehler: nicht-statische Variable kann nicht von einem statischen Kontext

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(); 
    } 
} 

ich diese Fehler bekommen:

Main.java:19: error: non-static variable n cannot be referenced from a static context
Super.n=m;
...........^
Main.java:25: error: cannot find symbol
s.print();

Kann mir bitte jemand sagen, warum diese Fehler auftreten?

+0

Meinen Sie für 'Sub' zu verlängern' Super'? – templatetypedef

+0

Ich habe darauf geantwortet, aber ich werde es auch als Tippfehler kennzeichnen, es sei denn, es gibt einen Grund, warum das nicht nur ein Tippfehler ist. – Ares

Antwort

0

Sub muss tatsächlich erben Super.

public class Sub extends Super würde Super Variablen von Sub zugänglich machen.

Sprache Referenz:

Inheritance in Java

1

Ihr Problem ist die Unterklasse:

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

Super.n ist eine Syntax eine Variable in einem Klassenbereich definiert zuzugreifen. In Java nennen wir diese Art von Variablen statische Variablen.

dieses Problem zu beheben, müssen Sie folgendes tun:

// 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); 
    } 
} 
Verwandte Themen