Перезаписать функцию и вызвать другую функцию в расширенном классе
Мои моторы мои 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()
;