gpt4 book ai didi

java - 来自静态上下文的非静态变量引用 (Java)

转载 作者:行者123 更新时间:2023-11-29 09:52:37 24 4
gpt4 key购买 nike

我已经搜索过这个问题,但仍然没有得到任何解决方案。

我声明了这个简单的程序:

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

但它一直给我错误:

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

    Student s = new Student();

我一直都是这样声明对象的!我不知道今天发生了什么。

我需要了解我在这里做错了什么?

最佳答案

当你声明内部类时:

class Outer {
class Inner {
}

void doSomething() {}
}

Inner 的每个实例都有一个对 Outer 类实例的隐式引用。这意味着您可以在内部类中编写以下内容来引用外部实例:

Outer.this.doSomething();

实际上,您通常可以简单地编写 doSomething() - 如果内部类也有一个名为 doSomething() 的方法,您只需要 Outer.this ,你需要消除歧义。

总而言之,您实际上需要一个 Outer 的实例来创建一个 Inner 的实例:

Outer outer = new Outer();
Inner inner = outer.new Inner();

如果您实际上不需要在 Inner 中引用 Outer 的实例(例如,您永远不需要调用 doSomething() ), 最简单的解决方案就是使内部类static:

class Outer {
static class Inner {}

void doSomething();
}

事实上,我建议您始终将内部类设为静态,除非您真的需要它们是非静态的。

关于java - 来自静态上下文的非静态变量引用 (Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34744142/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com