java - Android/java 将子方法附加到父方法

标签 java android inheritance

我正在尝试创建一个 Sprite 父类,它使用其中的一些方法通过在移动到子方法之前返回 null 来过滤掉一些无用的条件。我认为这在单个方法中使用时被称为“弹跳器模式”,但找不到任何跨父/子对象扩展的示例。

下面是代码的基本示例;

class parent ()
{
    public void update()
    {
         if (this.count<0)
         {
             return;
         }
         // do parent stuff
    }
}
class child extends parent ()
{
    public void update()
    {
         super.update()
         //do child stuff here
    }
}

当我运行子更新方法时,我希望它运行父方法,如果计数小于 0,则停止,不打扰父子内容。

我发现,一旦计数小于 0,父项就会停止,但子项会继续运行。这就像两种更新方法都被视为单独的函数。

我相信我需要一种将子更新方法附加到子更新方法的方法。我希望有一种简单的方法来实现这一点,但只要我不必在每个子类中编写弹跳器/过滤器代码,我就会接受复杂的解决方案。

非常感谢任何帮助。

杰森

#

替代解决方案

建议的代码 类父类 () { 公共(public)无效更新() { if (this.count<0) { 返回; } //做父级的事情 child_update()

    }
    child_update()
    {
         //place hold to be overridden by child
    }
}
class child extends parent ()
{
    @Override
    private void child_update()
    {
         //do child stuff here
    }
}

我认为这解决了我的问题,但还没有机会测试它。当我调用子对象更新方法时,它应该被定向到父方法,该方法执行保镖/验证检查,如果适用,则运行已被子方法覆盖的子更新。子方法将设置为私有(private),因此它如果没有验证检查就无法调用。

我个人认为这是比提议的 boolean 解决方案更干净的解决方案,但想知道其他人的想法。

谢谢

杰森

最佳答案

除非您 child 的 update() 中存在阻止这种情况发生的条件,否则这一切都会按预期进行。通过调用 super.update() 不会替换子级的 update()。它只是像调用任何其他方法一样调用它。这里唯一的区别是你特别想调用你的 child 扩展的 parent 的方法,因此是super.。但是一旦 parentupdate() 返回,调用者的剩余代码就会被执行。

您应该将 update() 更改为,即在执行方法代码时返回 boolean,然后使您 child 的代码如下所示:

@Override
public boolean update() {
  if( super.update() ) {
       ...

     return true;
  }

  return false;
}

另请注意 @Override 的使用(请参阅此处 to find out what it is )

关于java - Android/java 将子方法附加到父方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31463115/

相关文章:

java - 在暂停()和播放()之后VLCJ无法显示视频

java - @Transactional 中的 Session 会发生什么

android - viewpager 内的 RecyclerView

java - 如何获取 Android 设备的经纬度?

javascript - 在 JavaScript 中创建派生类的多个实例

c++ - 遍历基类成员

java - Spring声明式事务使用AOP配合hibernate,仍然使用默认的事务策略

Java 8 List<V> 到 Map<K, V>

android - 在 Android Wear 上设置背景

mysql - 如何在 SQL 中连接多个表,其对象将使用继承建模?