我正在尝试创建一个 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.
。但是一旦 parent
的 update()
返回,调用者的剩余代码就会被执行。
您应该将 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/