我的超级班叫做#34; BossCraft"其中包括标有"移动"的空白方法。 我还有一个扩展BossCraft的课程叫做SharkBoss,它也有一个空白"移动"方法。
是否有可能以某种方式致电SharkBoss"移动"进入更高BossCraft方法的方法?
public class BossCraft
{
public void move
{
//SharkBoss's move should go here
}
}
public class SharkBoss extends BossCraft
{
public void move
{
...
}
}
答案 0 :(得分:3)
是的,super.move()
(super.
表示调用(超类)的方法)
如果你想反过来 - 从超类调用子类 - 这是不可能的。超类不知道(也不应该知道)它的子类是否存在。
请注意,您的定义在语法上是不正确的 - 您应该有括号 - move()
答案 1 :(得分:0)
使用
super.move();
它将调用其父级的move()函数(即其超类实例)!
答案 2 :(得分:0)
我想调用父方法,用户超级关键字 如果你想调用child的方法,我会看一下Abstract classes
答案 3 :(得分:0)
是:
BossCraft craft = new SharkBoss();
// Actually calls SharkBoss.nove
craft.move();
答案 4 :(得分:0)
你不应该这样做。整个继承点是SharkBoss总是BossCraft,但是BossCraft可能是也可能不是SharkBoss。 SharkBoss工艺的方法应该只适用于SharkBoss。
如果您致电'移动'在SharkBoss上,SharkBoss的行动将被召唤,而你无需做任何事情。
答案 5 :(得分:0)
你可以在超类的移动方法中简单地转换为SharkBoss:
public class BossCraft {
public void move(){
//SharkBoss's move should go here
SharkBoss s = (SharkBoss) this;
s.move();
}
}
然而,使用子类的原则是它应该是单向关系,超类不应该知道它们的子类。我建议你重构。