我已经搜索过这个问题,但仍然没有得到任何解决方案.
我宣布了这个简单的程序:
public class Test{
public abstract class Person {
public void talk(){
System.out.print("I am a person");
}
public abstract void display();
}
public class Student extends Person {
public void talk(){
System.out.println("I am a student");
}
public void display(){
System.out.println("Nice to meet you");
super.talk();
}
}
public static void main(String args[])
{
Student s = new Student();
s.display();
}
}
Run Code Online (Sandbox Code Playgroud)
但它一直给我错误:
错误:非静态变量,不能从静态上下文引用
Student s = new Student();
Run Code Online (Sandbox Code Playgroud)
我一直在这样声明对象!我不知道今天发生了什么.
我需要了解我在这里做错了什么?
声明内部类时:
class Outer {
class Inner {
}
void doSomething() {}
}
Run Code Online (Sandbox Code Playgroud)
存在对Outer每个实例所持有的类的实例的隐式引用Inner.这意味着您可以在内部类中编写以下内容以引用外部实例:
Outer.this.doSomething();
Run Code Online (Sandbox Code Playgroud)
实际上,你通常可以简单地写doSomething()- 你只需要Outer.this内部类也有一个被调用的方法doSomething(),你需要消除歧义.
这个的长短是你实际上需要一个实例Outer来创建一个实例Inner:
Outer outer = new Outer();
Inner inner = outer.new Inner();
Run Code Online (Sandbox Code Playgroud)
如果你实际上不需要引用Outer内部实例Inner(例如你永远不需要调用doSomething()),最简单的解决方案就是创建内部类static:
class Outer {
static class Inner {}
void doSomething();
}
Run Code Online (Sandbox Code Playgroud)
事实上,我建议你总是让内部类静态,除非你真的需要它们是非静态的.
| 归档时间: |
|
| 查看次数: |
132 次 |
| 最近记录: |