分层继承

时间:2017-03-16 11:01:33

标签: java inheritance

我找到了这个javatpoint代码。但是当我尝试编译它时,它给了我一个错误。

Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
    No enclosing instance of type Hierarchical is accessible. Must qualify the allocation with an enclosing instance of type Hierarchical (e.g. x.new A() where x is an instance of Hierarchical).
    No enclosing instance of type Hierarchical is accessible. Must qualify the allocation with an enclosing instance of type Hierarchical (e.g. x.new A() where x is an instance of Hierarchical).
    at Inheritance.Hierarchical.main(Hierarchical.java:28)

为什么我收到此错误? Eclipse告诉我让课程保持静态,但我不明白为什么?

package Inheritance;

public class Hierarchical {

    static void bayern() {
        System.out.println("bayern");
    }

    class Hierarchical2 extends Hierarchical {

        static void barcelona() {
            System.out.println("barcelona");
        }
    }

    class Hierarchical3 extends Hierarchical {
        static void Madrid() {
            System.out.println("madrid");
        }
    }

    public static void main(String[] args) {
        Hierarchical2 h2 = new Hierarchical2();
        Hierarchical3 h3 = new Hierarchical3();
        h2.barcelona();
        h2.bayern();
        h3.Madrid();
        h3.bayern();
    }
}

2 个答案:

答案 0 :(得分:1)

由于Hierarchical2Hierarchical3不是静态的,因此需要一个封闭类(Hierarchical)的实例来实例化这些类。

如何做到这一点:

Hierarchical hierarchical = new Hierarchical();
Hierarchical2 hierarchical2 = hierarchical .new Hierarchical2();

声明类Hierarchical2Hierarchical3静态,您可以实现您的方式。

希望它有所帮助。

答案 1 :(得分:1)

您的班级Hierarchical2Hierarchical内部类,这意味着每个实例都必须在Hierarchical的实例中创建。但是,由于main()是一个静态方法,因此没有内部类的实例。

如果您将main()的内容移动到一个新的非静态方法中,请说public void champions(),并让main执行类似

的操作
Hierarchical h1 = new Hierarchical();
h1.champions();

这将消除你的错误。

我想知道你在做什么有多重要。你有一些你想要实现的目标吗?我认为你不会从你所写的内容中学到很多关于继承的知识。