You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用抽象类时遇No enclosing instance of type 'Abstraction'错误求助

解决「No enclosing instance of type 'Abstraction' is accessible」错误

错误原因

你遇到的问题是因为Animal和Horse是非静态内部类(嵌套在外部类Abstraction中),而静态的main方法无法直接创建非静态内部类的对象——非静态内部类必须依赖外部类的实例才能存在。

解决方案

方案1:将内部类改为静态类

给Animal和Horse加上static修饰符,让它们成为静态内部类,这样就不需要外部类实例就能创建对象:

public class Abstraction {
    public static void main(String[] args) {
        Horse h = new Horse();
        h.walk();
    }

    static abstract class Animal {  
        abstract void walk();
    }

    static class Horse extends Animal {
        void walk() {
            System.out.println("Walks on 4 legs");
        }
    }
}

方案2:先创建外部类实例,再生成内部类对象

如果不想修改内部类的静态属性,可以先实例化外部类,再通过外部类对象创建内部类实例:

public class Abstraction {
    public static void main(String[] args) {
        Abstraction outer = new Abstraction();
        Horse h = outer.new Horse();
        h.walk();
    }

    abstract class Animal {  
        abstract void walk();
    }

    class Horse extends Animal {
        void walk() {
            System.out.println("Walks on 4 legs");
        }
    }
}

方案3:将类改为独立顶级类

如果不需要嵌套类结构,把Animal和Horse拆成独立的顶级类,每个类放在对应的.java文件中:

Main.java

public class Main {
    public static void main(String[] args) {
        Horse h = new Horse();
        h.walk();
    }
}

Animal.java

abstract class Animal {  
    abstract void walk();
}

Horse.java

class Horse extends Animal {
    void walk() {
        System.out.println("Walks on 4 legs");
    }
}

内容的提问来源于stack exchange,提问作者Vivekananda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 19:35:21