Java 覆盖函数并调用扩展类中的其他函数

Java 覆盖函数并调用扩展类中的其他函数,java,inheritance,mindstorms,Java,Inheritance,Mindstorms,我的NXT2.0的电机是向后的,现在每次我运行forward()命令时,它都会向后滚动。我正在使用DifferentialPilot移动我的机器人,因此希望覆盖DifferentialPilot类中的几个函数 我从该类继承并用自定义构造函数重写了所有构造函数。 然后我重写了forward(),现在应该调用backward(),反之亦然 然而,现在我得到了例外,我真的不知道为什么 下面是被覆盖的类: package lejos.robotics.navigation; import lejos.r

我的
NXT2.0
的电机是向后的,现在每次我运行
forward()
命令时,它都会向后滚动。我正在使用
DifferentialPilot
移动我的机器人,因此希望覆盖
DifferentialPilot
类中的几个函数

我从该类继承并用自定义构造函数重写了所有构造函数。 然后我重写了
forward()
,现在应该调用
backward()
,反之亦然

然而,现在我得到了例外,我真的不知道为什么

下面是被覆盖的类:

package lejos.robotics.navigation;
import lejos.robotics.RegulatedMotor;

public class CustomDifferentialPilot extends DifferentialPilot {

    public CustomDifferentialPilot(final double wheelDiameter, final double trackWidth, final RegulatedMotor leftMotor,
            final RegulatedMotor rightMotor) {
        super(wheelDiameter, trackWidth, leftMotor, rightMotor);

    }

    public CustomDifferentialPilot(final double wheelDiameter, final double trackWidth, final RegulatedMotor leftMotor,
            final RegulatedMotor rightMotor, final boolean reverse) {
        super(wheelDiameter, trackWidth, leftMotor, rightMotor, reverse);
    }

    public CustomDifferentialPilot(double leftWheelDiameter, double rightWheelDiameter, double trackWidth,
            RegulatedMotor leftMotor, RegulatedMotor rightMotor, boolean reverse) {
        super(leftWheelDiameter, rightWheelDiameter, trackWidth, leftMotor, rightMotor, reverse);
    }

    public void forward() {
        backward();
    }

    public void backward() {
        forward();
    }

}
还有我的机器人示例代码:

import lejos.robotics.navigation.CustomDifferentialPilot;


public class DriveTest {

    private static CustomDifferentialPilot diffPilot;
    public static void main(String[] args) {
        diffPilot = new CustomDifferentialPilot(10, 20, Motor.A, Motor.B);
        diffPilot.forward();
    }

}

是否不允许在覆盖方法内的子类中从超类调用函数?

您的主方法实际上不会创建
diffPilot
的实例。您应该在
diffPilot.forward()处获得一个NullPointerException

你应该做什么

diffPilot = new CustomDifferentialPilot(...);
在调用
.forward()
之前,在main方法中

忘记将
super()
传递给重写的方法

public void forward() {
    super.backward();
}

public void backward() {
    super.forward();
}

谢谢,那绝对是一个愚蠢的错误。不过我还是有例外。除非你发布完整的stacktrace,否则任何人都很难帮助你。我知道。这就是为什么调试对我来说也很困难,因为我自己看不到整个stacktrace,因为它只显示在NXT的LCD上。那么实际的覆盖应该是这样的吗?