Java Homework: Structural Recursion - A train. Write a set of classes that model
ID: 3699369 • Letter: J
Question
Java Homework: Structural Recursion - A train. Write a set of classes that model a train - starting with an abstract class called TrainCar as follows:
public abstract class TrainCar{
protected double itsDistanceFromHome;
protected TrainCar isNextConnectedCar;
public TrainCar(TrainCar nextCar){
itsNextConnectedCar = nextCar;
itsDistanceFromHome = 0.0;
public abstract void advance(double howFar);
public abstract Boolean isMemberOfValidTrain();
}
Using TrainCar, extend it into Engine, BoxCar, and Caboose with their own constructors and implementation of the advance and isMemberOfValidTrain methods. Then write a class Train that only knows about the Engine. A valid train consists of an engine followed by some number of BoxCars ending with a Caboose. Calling isMemberOfValidTrain on the Engine should return true if this actually is the setup and false if it is not. Calling advance(double) on the engine should advance the entire train.
Explanation / Answer
package engine;
public abstract class TrainCar{
protected double itsDistanceFromHome;
protected TrainCar isNextConnectedCar;
public TrainCar(TrainCar nextCar){
this.isNextConnectedCar = nextCar;
this.itsDistanceFromHome = 0.0;
}
public abstract void advance(double howFar);
public abstract Boolean isMemberOfValidTrain();
}
// 2.
package engine;
public class Engine extends TrainCar {
public Engine(TrainCar nextCar) {
super(nextCar);
}
@Override
public void advance(double howFar) {
super.itsDistanceFromHome+=this.itsDistanceFromHome;
}
@Override
public Boolean isMemberOfValidTrain() {
if(this.isNextConnectedCar.equals(super.isNextConnectedCar)) return true;
return false;
}
}
//3.
package engine;
public class BoxCar extends TrainCar {
public BoxCar(TrainCar nextCar) {
super(nextCar);
// TODO Auto-generated constructor stub
}
@Override
public void advance(double howFar) {
super.itsDistanceFromHome+=this.itsDistanceFromHome;
}
@Override
public Boolean isMemberOfValidTrain() {
if(this.isNextConnectedCar.equals(super.isNextConnectedCar)) return true;
return false;
}
?
?
}
//4.
package engine;
public class Caboose extends TrainCar {
public Caboose(TrainCar nextCar) {
super(nextCar);
// TODO Auto-generated constructor stub
}
@Override
public void advance(double howFar) {
super.itsDistanceFromHome+=this.itsDistanceFromHome;
}
@Override
public Boolean isMemberOfValidTrain() {
if(this.isNextConnectedCar.equals(super.isNextConnectedCar)) return true;
return false;
}
?
}
//5.
package engine;
public class Train {
Engine engine;
public Engine getEngine() {
return engine;
}
public void setEngine(Engine engine) {
this.engine = engine;
}
}
//6.
package engine;
public class Test {
public static void main(String[] args) {
TrainCar tc=null;
Train t=new Train();
TrainCar tc1= new TrainCar(tc) {
@Override
public void advance(double howFar) {
super.itsDistanceFromHome+=this.itsDistanceFromHome;
}
@Override
public Boolean isMemberOfValidTrain() {
if(this.isNextConnectedCar.equals(super.isNextConnectedCar)) return true;
return false;
}
};
t.setEngine(new Engine(tc1));
boolean var= t.engine.isMemberOfValidTrain();
System.out.println(var);
}
}
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.