使用抽象类时遇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
相关产品推荐
相关产品推荐

