重写虚/抽象方法采用空实现是否可行?游戏类设计问询
关于重写方法空实现与抽象方法派生类处理的问题
当然可以这么做!咱们一步步来解答你的两个疑问:
1. 重写虚方法但不提供任何实现是否可行?
完全没问题。虚方法的设计初衷就是允许派生类根据自身需求选择重写逻辑,哪怕是提供一个空实现——只要语法上符合重写规则(比如用override关键字),编译器就会认可。不过从设计角度来说,你得考虑这样做是否合理:如果调用者预期这个方法会有某种行为,空实现可能会让他们困惑,但如果业务逻辑里本来就允许这个方法“什么都不做”,那完全没问题。
2. 派生类能否用“空实现”重写抽象方法?
必须可以!抽象方法的核心要求是派生类必须提供实现,而空实现也是一种合法的实现方式——你没有违反“必须重写”的规则,只是实现逻辑为空。就像你给出的代码示例,Potion类的Use方法空实现完全合法,编译和运行都不会有问题。
你的示例代码是完全可运行的,执行后会输出:
Sword used!
因为Potion的Use什么都不做,而Sword的Use执行了打印逻辑,完全符合预期。
额外的设计小建议
如果你的游戏里有很多类似Potion的物品,不需要Use方法有实际逻辑,或许可以把Item里的抽象方法改成虚方法并提供默认空实现:
public abstract class Item { public virtual void Use() { // 默认空实现 } }
这样Potion类就不用显式重写Use了,直接继承默认实现即可,代码会更简洁。不过如果你的设计要求每个物品必须明确决定Use的行为(哪怕是空),那保持抽象方法让派生类显式写空实现也完全没问题,这取决于你的游戏架构需求。
内容的提问来源于stack exchange,提问作者user1322654
相关产品推荐
相关产品推荐

