静态内部类可以扩展其外部类吗?

时间:2019-05-22 07:39:21

标签: java intellij-idea

public class Outer {

    public static class Inner extends Outer {

    }
}

它似乎可以用我的openjdk8编译器进行编译,但是IntelliJ 2019.1抱怨: 无法访问外部

我认为这可能是IntelliJ的错误。

编辑:我确认这是一个IntelliJ错误。我通过安装带有捆绑的OpenJDK 11的IntelliJ解决了这个问题。

3 个答案:

答案 0 :(得分:3)

这可以在OpenJDK 11中使用:

public class Outer {
    public static void main(String[] args) {
        Inner inner = new Inner();
        inner.foo();
    }

    void foo() {
        System.out.println("foo from Outer");
    }

    public static class Inner extends Outer {
        @Override
        void foo() {
            System.out.println("foo from Inner");
        }
    }
}

输出:

foo from Inner

答案 1 :(得分:3)

它应该可以工作并且可以在我的机器上工作。

IntelliJ IDEA 2019.1.2
Build #IU-191.7141.44

jdk1.8.0_201

可以将公共嵌套类扩展为对子类可见的任何其他顶级类。绝对不是关于继承或可见性的Java问题。

这可能是IntelliJ问题,与它扫描软件包/项目的方式有关。确保不涉及其他Outer类。是的,IDEA可能找到了另一个Outher并偷偷地试图访问它。还要检查您的进口。

答案 2 :(得分:-2)

是的,可以。这是示例。

public class SampleClass {
       static abstract class Test{
          int num = 300;
          public abstract void display();
       }
       class DemoClass extends Test{
          public void display() {
             System.out.println("Hi how are you");
          }
       }
       public static void main(String args[]){
          SampleClass obj = new SampleClass();
          obj.new DemoClass().display();
       }
    }

o / p:嗨,你好吗