Перезаписать функцию и вызвать другую функцию в расширенном классе

Мои моторы мои NXT2 2.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();
    }

}

Разрешен ли вызов функции из суперкласса в подклассе внутри перезаписанного метода?

2 ответа

Решение

Забыл пройти super() к переопределенным методам.

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

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

Ваш основной метод на самом деле не создает экземпляр diffPilot, Вы должны получить NullPointerException в diffPilot.forward();,

Вы должны делать

diffPilot = new CustomDifferentialPilot(...);

в вашем основном методе перед вызовом .forward();

Другие вопросы по тегам