【问题标题】:Superclass and Subclass JavaJava的超类和子类
【发布时间】:2011-11-17 20:55:49
【问题描述】:

我有一个名为“BossCraft”的超类,其中包含一个标记为“move”的 void 方法。 我还有一个扩展 BossCraft 的类,叫做 SharkBoss,它也有一个 void “move” 方法。

是否有可能以某种方式将 SharkBoss 的“move”方法调用到更高的 BossCraft 方法中?

public class BossCraft
{
   public void move
   {
      //SharkBoss's move should go here
   }
}
public class SharkBoss extends BossCraft
{
   public void move
   {
      ...
   }
}

【问题讨论】:

  • 啊,你是什么意思'是否有可能以某种方式将 SharkBoss 的“移动”方法调用到更高的 BossCraft 方法中?继承背后的想法是,你可以在 BossCraft 中定义所有移动代码,然后你可以调用SharkBoss.move(),它会运行 BossCraft 中的移动代码,这是你的意思吗?

标签: java subclass superclass


【解决方案1】:

是的,super.move()super. 表示调用超类的(方法))

如果你想反过来——从超类调用子类——这是不可能的。超类不知道(也不应该知道)其子类的存在。

请注意,您的定义在语法上不正确 - 您应该有括号 - move()

【讨论】:

  • 我认为他正试图做相反的事情。
  • 可能..但他应该改进他的句子,这可能意味着任何一个(实际上现在并不意味着任何事情:))。反正我加了一句话
  • 如果他想反过来做,他可以在抽象类中使用它(也许重写一点代码)?
  • 是的。但这取决于他想做什么。我回答了我理解的直接问题:)
【解决方案2】:

使用

super.move();

它将调用其父级(即其超类实例)的 move() 函数!

【讨论】:

    【解决方案3】:

    我要调用parent的方法,user super关键字 如果你想调用孩子的方法,我会看看抽象类

    【讨论】:

      【解决方案4】:

      是的:

      BossCraft craft = new SharkBoss();
      // Actually calls SharkBoss.nove
      craft.move();
      

      【讨论】:

        【解决方案5】:

        你不应该这样做。继承的重点是 SharkBoss 始终是 BossCraft,但 BossCraft 可能是也可能不是 SharkBoss。 SharkBoss工艺上的方法应该只适用于SharkBoss。

        如果您在 SharkBoss 上调用“move”,那么 SharkBoss move 将被调用,而您无需执行任何操作。

        【讨论】:

          【解决方案6】:

          您可以简单地在超类的 move 方法中强制转换为 SharkBoss:

          public class BossCraft {
             public void move(){
                 //SharkBoss's move should go here
             SharkBoss s = (SharkBoss) this;
             s.move();
             }
          }
          

          但是使用子类的原则是它应该是一种单向关系,超类不应该知道它们的子类。我建议你重构。

          【讨论】:

          • 那仍然行不通。强制转换不会改变对象的类型,它只是允许代码编译。这段代码会以 StackOverflow 结束:D
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-10-16
          • 2022-01-23
          • 2019-06-29
          • 1970-01-01
          相关资源
          最近更新 更多