Java-不可以访问foo类型的封闭实例

Java-不可以访问foo类型的封闭实例

我有以下代码:

class Hello {
    class Thing {
        public int size;

        Thing() {
            size = 0;
        }
    }

    public static void main(String[] args) {
        Thing thing1 = new Thing();
        System.out.println("Hello, World!");
    }}

我知道呀Thing什么也不做,但我的你好,世界程序编译只是很好没有它。只有我定义的类在我身上失败了。

它拒绝编译。我得到No enclosing instance of type Hello is accessible."在创造新事物的那条线上。我猜要么是:

  1. 我有系统级别的问题(无论是在DrJava中还是在我的Java安装中),或者
  2. 对于如何用java构建一个工作程序,我有一些基本的误解。

有什么想法吗?


倚天杖
浏览 890回答 3
3回答

慕斯709654

static class Thing会让你的计划运转起来。事实上,你有Thing的内部类,该类(根据定义)与Hello(即使它从不使用或引用它),这意味着这是一个错误的说法new Thing();没有特别的Hello例如在范围内。如果您将它声明为静态类,则它是一个“嵌套”类,它不需要特定的Hello举个例子。

人到中年有点甜

你已经宣布了这门课Thing作为一个非静态的内部类。这意味着它必须与Hello班级,等级。在您的代码中,您试图创建一个Thing从静态的上下文中。这正是编译器所抱怨的。有几种可能的解决办法。使用哪种解决方案取决于您想要实现什么。移动Thing走出Hello班级,等级。变化Thing成为static嵌套类static class Thing创造实例的Hello在创建Thing.public static void main(String[] args){     Hello h = new Hello();     Thing thing1 = h.new Thing(); // hope this syntax is right, typing on the fly :P}最后的解决方案(a非静态的任何实例时,嵌套类)都是强制性的。Thing依赖于Hello才有意义。例如,如果我们有:public class Hello {     public int enormous;     public Hello(int n) {         enormous = n;     }     public class Thing {         public int size;         public Thing(int m) {             if (m > enormous)                 size = enormous;             else                 size = m;         }     }     ...}创建类对象的任何原始尝试Thing,见:Thing t = new Thing(31);会有问题,因为不会有明显的enormous值来测试31。实例h.的.Hello外部类是提供以下内容所必需的h.enormous价值:...Hello h = new Hello(30);...Thing t = h.new Thing(31);...因为这并不意味着Thing如果它没有Hello.有关嵌套/内部类的更多信息:嵌套类(Java教程)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java