问题描述
我正在尝试创建一个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,父对象停止运行,而子对象继续运行。 就像两种更新方法都被视为单独的函数一样。
我相信我需要一种将子更新方法附加到子更新方法的方法。 我希望有一种简单的方法可以实现这一目标,但是只要我不必在每个子类中编写保镖/过滤器代码,就可以接受复杂的解决方案。
任何帮助深表感谢。
杰森
#替代解决方案
建议的代码类parent(){public void update(){if(this.count <0){return; } //做父母的东西child_update()
} child_update() { //place hold to be overridden by child } } class child extends parent () { @Override private void child_update() { //do child stuff here } }
我认为这解决了我的问题,但还没有机会进行测试。 当我调用子对象更新方法时,应将其定向到父方法,该方法执行保镖检查/验证检查,并在适用的情况下运行已被子方法覆盖的子更新。子方法将设置为私有,因此它没有验证检查就无法调用。
我个人认为这是一个比提议的布尔型解决方案更干净的解决方案,但我想知道其他人的想法。
谢谢
杰森
1楼
除非您孩子的update()
有阻止这种情况发生的条件,否则所有这些都可以按预期进行。
通过调用super.update()
不能代替child的update()
。
它只是像调用其他任何方法一样调用它。
唯一的区别是您特别想调用孩子扩展的父母方法,因此是super.
。
但是一旦parent
的update()
返回,则调用者的其余代码将被执行。
在执行方法代码时,应将update()
更改为ie返回boolean
,然后使孩子的代码如下所示:
@Override
public boolean update() {
if( super.update() ) {
...
return true;
}
return false;
}
另请注意@Override
使用(请参阅此处 )
2楼
您是否只是使method
“ boolean”的return
类型在子类中进行检查。
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;
}
}