【问题标题】:Android / java append child method to parent methodAndroid / java将子方法附加到父方法
【发布时间】:2015-07-16 19:41:03
【问题描述】:

我正在尝试创建一个 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,父项就会停止,但子项会继续运行。这就像两个更新方法都被视为单独的函数。

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

非常感谢任何帮助。

杰森

#

替代解决方案

建议的代码 类父() { 公共无效更新() { 如果 (this.count

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

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

我个人认为这是一个比提出的布尔解决方案更清洁的解决方案,但想知道其他人的想法。

谢谢

杰森

【问题讨论】:

    标签: java android inheritance


    【解决方案1】:

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

    你应该将你的update()更改为,即在方法代码执行时返回boolean,然后让你孩子的代码看起来像:

    @Override
    public boolean update() {
      if( super.update() ) {
           ...
    
         return true;
      }
    
      return false;
    }
    

    还要注意@Override 的使用(参见此处to find out what it is

    【讨论】:

    • 抱歉,它不允许我编辑我之前的评论。我曾考虑过使用布尔返回类型。我的主要问题是我必须在子方法中包含其他功能。由于你们中的两个人发布了相同的解决方案,因此它看起来是可行的方法并且实施起来非常简单。但是,我想出了一个不使用返回布尔值的替代解决方案,并将很快编辑问题以包含我认为有效的基本示例。请让我知道您的想法以及您会推荐哪种方式。
    【解决方案2】:

    难道你不能将return 类型设为method `boolean' 并在子类中检查它。

        class parent ()
        {
            public boolean update()
            {
                 if (this.count<0)
                 {
                     return false;
                 }
                 // do parent stuff
                 return true; 
            }
        }
        class child extends parent ()
        {
            @Override
            public boolean update()
            {
                 if( super.update() )
                 {
                     // do child stuff
                 }
                return true;    
    
    
      }
    }
    

    【讨论】:

    • 您好,感谢您的回复。我曾考虑过使用布尔返回类型。我的主要问题是我必须在子方法中包含其他功能。由于你们中的两个人发布了相同的解决方案,因此它看起来是可行的方法并且实施起来非常简单。但是,我想出了一个不使用返回布尔值的替代解决方案,并将很快编辑问题以包含我认为有效的基本示例。请让我知道您的想法以及您会推荐哪种方式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-16
    • 2023-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-30
    • 2017-03-12
    相关资源
    最近更新 更多