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

Java抽象类与多态:为何可将抽象类作为方法参数?

关于抽象类作为方法参数的疑问解答

你搞混了抽象类的引用和抽象类的对象这两个核心概念:

  • Java确实不能直接创建抽象类的对象,但完全可以声明抽象类类型的引用变量。方法里的GameCharacter gamechar只是一个引用,不是抽象类的实例本身。
  • 实际调用这个方法时,传入的参数必须是GameCharacter的非抽象子类的实例——子类只要实现了抽象类里所有的抽象方法,就能正常实例化。比如你写一个Hero类继承GameCharacter并实现所有抽象方法,调用setPlayer(new Hero())时,gamechar这个引用就指向了Hero的对象,而不是抽象类的对象。
  • 这是Java多态的典型用法:用抽象类作为方法参数,能接收所有它的子类实例,让代码更灵活。比如后续新增Monster子类,同样可以传给这个方法,不用修改方法的定义。

举个简单的代码示例辅助理解:

// 抽象类
abstract class GameCharacter {
    abstract void attack();
}

// 子类实现抽象类
class Hero extends GameCharacter {
    @Override
    void attack() {
        System.out.println("Hero attacks!");
    }
}

// 调用setPlayer方法
public class Game {
    public void setPlayer(GameCharacter gamechar) {
        gamechar.attack(); // 实际调用的是子类Hero的attack方法
    }

    public static void main(String[] args) {
        Game game = new Game();
        game.setPlayer(new Hero()); // 传入子类实例
    }
}

内容的提问来源于stack exchange,提问作者Ömer Gün

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 19:10:32