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

Java抽象类中匿名内部类创建对象的代码解析请求

解析抽象类中匿名内部类创建实例的工作原理

原代码

package javaPrac;

abstract public class Abstract_class_method {
    
    abstract void show(); //抽象方法需要抽象类,且无方法体
    
    void calculate(int x, int y)
    {
        int calc = x + y;
        System.out.println("This is the normal method in abstract class "+calc);
    }
    
//据我所知,在抽象类中创建main方法没有意义,因为无法创建抽象类的对象,所以需要使用extend关键字继承它或使用接口。
    
    public static void main(String[] args) {
        Abstract_class_method abobject = new Abstract_class_method() {
            
            @Override
            void show() {
                // TODO Auto-generated method stub
                System.out.println("This is the main method");
                
            }
        };
        abobject.show();
        abobject.calculate(10, 12);
    }

}

运行输出

This is the main method
This is the normal method in abstract class 22

代码工作原理解析

你看到的new Abstract_class_method() {...}并不是直接实例化抽象类本身——抽象类确实不能直接创建对象。这里实际做的是:

  • 动态创建了一个继承自Abstract_class_method的匿名子类,并且在大括号内实现了抽象类中未完成的show()抽象方法,满足了抽象类必须被继承且实现所有抽象方法的要求。
  • 这个匿名子类没有显式的类名,只能在创建语句中完成实例化,最终得到的是这个匿名子类的对象,而非抽象类本身的对象。
  • abobject是抽象类类型的引用,指向这个匿名子类的对象,这是Java的多态特性:调用show()时,会执行匿名子类中重写的实现;调用calculate()时,因为子类没有重写该方法,所以执行父类抽象类中的原有实现。

另外补充:抽象类中的main方法是静态方法,静态方法属于类本身,不需要创建类的对象就能执行,所以这段代码里的main可以正常启动运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 07:10:11