为什么我的子类方法不重写其父类中相同签名的方法?
我有一个类PlayerPaddle
,它扩展了一个抽象类Paddle
,后者扩展了抽象类Actor(这里的上下文是一个pong游戏)。paddle
和playerpaddle
都有一个具有相同签名的方法:
public void moveDown()
目的是让PlayerPaddle
MoveDown
方法重写Paddle
的方法。这里的问题是,当我在playerpaddle
内部调用this.movedown()
时,只调用paddle
的movedown
方法。
在Paddle
中的MoveDown()
上设置的断点会脱扣,而在PlayerPaddle
中的MoveDown()
上设置的断点从不脱扣。我还在PlayerPaddle
MoveDown
方法上尝试了@override
,但它仍然调用Paddle
MoveDown
方法。
目标是让PlayerPaddle
对象以与其他Paddle
对象不同的速度上下移动。因此moveup
方法也会出现同样的问题。
abstract public class Actor {
public void releasedEvent(KeyEvent e) {
}
}
abstract public class Paddle extends Actor {
public void moveDown() { // this method is called
body.setVel(0, Game.dX / 10.);
}
}
public class PlayerPaddle extends Paddle {
@Override
public void moveDown() { // this method never gets called
body.setVel(0, Game.dX );
}
public void receiveEvent(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_UP) {
this.moveUp();
} else if (e.getKeyCode() == KeyEvent.VK_DOWN) {
this.moveDown(); // Want to call moveDown() inside PlayerPaddle
}
}
}
我很乐意提供澄清。
看看简单的案例,它起作用了:
public class Test{
public static void main(String args[])
{
new PlayerPaddle().receiveEvent();
}
}
abstract class Actor {
public void releasedEvent(KeyEvent e) {
}
}
abstract class Paddle extends Actor {
public void moveDown() { // this method is called
System.out.println("paddle");
}
}
class PlayerPaddle extends Paddle {
@Override
public void moveDown() { // this method never gets called
System.out.println("playerpaddle");
}
public void receiveEvent() {
this.moveDown(); // Want to call moveDown() inside PlayerPaddle
}
}
它叫PlayerPaddle。
我最近开始学习Java,目前正在研究多态性。考虑下面的代码: 在执行这段代码时,我发现sides()方法不能被重写。我理解在重写中,方法名和返回类型应该相同,但在本例中返回类型不同。那么,有没有办法执行它而不导致重写,但保持相同的名称和不同的类型?
我有一个主类。应用程序中有许多子类是从类扩展而来的。base类公开公共方法,如下所示: 应用程序将在子实例上调用以获得一个检查器实例。每个子类都可以有自定义的基本检查器和验证检查器。他们可以使用和方法实现它,但是他们不能覆盖基类的,因为它包含处理逻辑。 在这里使用关键字合适吗?
主要内容:如何调用被重写的方法前面讲过在 Python 中,子类继承了父类,那么子类就拥有了父类所有的类属性和类方法。通常情况下,子类会在此基础上,扩展一些新的类属性和类方法。 但凡事都有例外,我们可能会遇到这样一种情况,即子类从父类继承得来的类方法中,大部分是适合子类使用的,但有个别的类方法,并不能直接照搬父类的,如果不对这部分类方法进行修改,子类对象无法使用。针对这种情况,我们就需要在子类中重复父类的方法。 举个例子,鸟通
无法使用下面的行从子类访问方法, 假设我在子类中有一个方法,而父类中没有相同的方法。在这种情况下,我们无法使用上述代码行访问子类方法print()。但是请注意,如果我们在父类中有相同的方法,那么我们可以使用上面的代码访问它。 可能没有这样的现实生活场景,但试图理解为什么我无法访问子类使用类型为父的子对象,如果我们没有在父类中定义相同的方法。 示例代码如下: 更多解释——如果我在父类中定义了方法,那
为什么不可能在子类中有一个静态方法,它的签名与父类中的签名相同? 我只是想知道为什么他们允许在这里使用final修饰符?我们都知道静态方法属于一个类而不属于对象,所以不可能在子类中重写方法。所以对于我来说在这里是多余的。
重载子类中重写的方法,我是重载父方法还是重载子类方法? 我大体上理解什么是超载和超驰。 重载-同一方法在同一个类中有不同的参数和可能的返回类型。 重写-子类中的方法签名与父类中的方法签名相同,但实现不同。 方法B.a(INTX)是重载a.a还是重载B.a?