【问题标题】:Casting a class to a selfmade class将课程转换为自制课程
【发布时间】:2025-12-21 01:20:28
【问题描述】:

我只是在玩一点 java 并尝试实现一个小型 Dungeon 游戏。

马当前的问题是我有一个类“怪物”和一个类“陷阱”。此外,我还有一个“遭遇”类,其中随机选择怪物或陷阱并返回以与英雄的统计数据进行比较。

我真的不知道如何将这个怪物或陷阱转化为遭遇,所以我可以使用它。

这是我目前遇到的方法:

public Encounter generate(){
  Encounter encounter = new encounter();
  Trap trap1 = new Trap(random, trap1);
  Monster monster1 = new Monster(random, random);

  if (random > 5){
    encounter = (Encounter) Monster; (?) //this is where I need help
 .....

好吧,我希望我已经足够彻底地解释了这个问题.. 提前感谢您的帮助!

(我在别处看了,但没有找到解决方案,虽然可能看起来不够努力,或者根本不知道键盘,请原谅)

【问题讨论】:

  • 我想我可能还没有完全理解铸造的概念......
  • 了解接口
  • 哦,random 只是一个随机整数,我不想在里面放不必要的代码,只想专注于我的问题
  • 好的,谢谢这个关键字,我会深入研究它

标签: java class casting


【解决方案1】:

所以你有一个类 Encounter 可以是陷阱或怪物,最好的事情是陷阱和怪物都继承自遇到(或实现接口遇到),所以它们有一些共享方法,那么你可以只需转换它们,但如果它们不实现公共接口或共享公共超类,则不能转换它们。

【讨论】:

  • 但是我不能在接口中编写代码(或者只是在抽象类中?)
  • 哦,我只需要将它设为默认值,明白了:D 谢谢
  • 只是指出,以这种方式使用继承被称为“is-a”设计模式。另一种选择是“has-a”模式。对于这个问题,你有 3 个类,Encounter、TrapAttributes 和 MonsterAttributes。 Encounter 可以选择包含任何一种属性。虽然“has-a”代码看起来不那么优雅,但它往往更容易在不破坏假设的情况下进行更改。参见例如w3resource.com/java-tutorial/…