【问题标题】:Why can I not access an inner class in Java? [duplicate]为什么我不能访问 Java 中的内部类? [复制]
【发布时间】:2014-12-15 21:53:41
【问题描述】:

我在 Java 中使用嵌套类时遇到问题,有人知道为什么 Java 不允许我这样做吗?

public class A{
    private class B{
        public B(){
            System.out.println("class B");
        }
    }

    public static void main(String[] args){
         A a = new A();
         B b = new B();
    }
} 

【问题讨论】:

  • 你不应该首先使用内部类:)。你真的需要它吗?
  • @libik:内部类并没有错,但就像语言的大多数特性一样,你可以滥用它。
  • 只是一个想法......在发布问题时,请始终包括您遇到的类型或错误。
  • @Makoto - instanceofsingleton 模式没有任何问题,但如果你需要,这通常意味着糟糕的设计。

标签: java inner-classes


【解决方案1】:

因为您试图从静态方法访问非静态内部类。

第一个解决方案是将您的内部类 B 更改为 static

public class A{
    private static class B {
        public B() {
            System.out.println("class B");
        }
    }

    public static void main(String[] args){
         A a = new A();
         B b = new B();
    }
}

static 内部类可从任何地方访问,但非静态类需要容器类的实例。

另一种解决方案是:

A a = new A();
B b = a.new B();

这将使您更好地了解内部类在 Java 中的工作方式:http://www.javaworld.com/article/2077411/core-java/inner-classes.html

【讨论】:

  • 如果有帮助,您能否将我的回答标记为“已接受”?谢谢。
【解决方案2】:
A a = new A();
B b = a.new B();

可以解决你的问题

你使用了私有内部类。如何在A类之外获取实例?

public class JustForShow {
    public class JustTry{

        public JustTry() {
            System.out.println("Initialized");
        }
    }
    public static void main(String[] args) {
        JustForShow jfs = new JustForShow();
        JustTry jt = jfs.new JustTry();
    }
}

【讨论】:

  • 重读你的代码,伙计。
  • 这是确实创建了 B 实例的有效 java 代码。
【解决方案3】:

您正在尝试从静态方法访问非静态成员。要解决这个问题,您有两种选择:

  1. 将您的类B 更改为静态,因此在类定义中添加static 关键字,如下所示:

    public static class B { // ...
    
  2. 改变你的main方法,使用创建的实例a创建B,像这样:

    B b = a.new B();
    

如果B不使用A类的任何非静态资源,我建议使用第一种方法。

【讨论】:

    【解决方案4】:
    public static void main(String[] args){
         A a = new A();
         A.B b = a.new B();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-31
      • 1970-01-01
      • 2019-09-07
      • 1970-01-01
      • 1970-01-01
      • 2017-02-28
      • 2014-03-28
      相关资源
      最近更新 更多