因此,作为项目的一部分,我必须使用一个类型为Vehicle的数组,该数组被抽象为2个子类motorized和pedal,然后有4个子类被多态化。
我的问题是如何访问车辆类型的车辆对象数组中的变量。下面是显示设置的部分当前代码。
//Main
import java.io.*;
import java.util.*;
public class DatabaseMain
{
public static void main(String[] args) throws Exception
{
String inputString;
File inFile = new File(args[0]);
Scanner lineCounter = new Scanner(inFile);
Scanner fileScan = new Scanner(inFile);
File outFile = new File(args[1]);
PrintStream printer = new PrintStream(outFile);
int lineCount = 0;
while (lineCounter.hasNextLine())
{
lineCount++;
String linePoint = lineCounter.nextLine();
}
Vehicle[] vehicle = new Vehicle[lineCount];
inputString = fileScan.nextLine();
String completeInputString = "";
for(int i = 0; i < lineCount; i++)
{
String inputFront = inputString.substring(0,2);
if(inputFront.contains("b%"))
{
vehicle[i] = new Bicycle();
vehicle[i].setup(inputString);
}
completeInputString = completeInputString + "\n" + inputString;
if(fileScan.hasNextLine()) //Special Last run to handle end of File lines
{
inputString = fileScan.nextLine();
}
}
printer.print(completeInputString);
}
}//CourseMain
//Bicycle.java
import java.util.Arrays;
public class Bicycle extends Pedal
{
String type;
String make;
int size;
int vehicleID;
int numberOfGears;
String owner;
int numberOfRiders;
public void setup(String inputString)
{
String[] parts = inputString.split("%");
type = parts[0];
make = parts[1];
size = Integer.parseInt(parts[2]);
vehicleID = Integer.parseInt(parts[3]);
numberOfGears = Integer.parseInt(parts[4]);
owner = parts[5];
numberOfRiders = Integer.parseInt(parts[6]);
}
public String getMake() {return make;}
}
http://i.stack.imgur.com/RQwmb.png
这是一个显示数据如何存储在对象数组中的图像。
注意:我不允许在此项目中使用ArrayList
答案 0 :(得分:0)
您的第一份工作应该是考虑您的问题,定义问题域,然后从中设计对象模型域。
你说过你的分解涉及一种车型,它有两种不同的亚型:PedalDrivenVehicle和MotorizedVehicle。注意:踏板在这里是一个非常糟糕的子类型名称。从类型名称中,任何读取代码的人都清楚PedalDrivenVehicle 是一辆车。
所以到目前为止你的代码看起来应该是这样的:
public interface Vehicle { ... }
public abstract class PedalDrivenVehicle extends Vehicle { ... }
public abstract class MotorizedVehicle extends Vehicle { ... }
车辆应该是界面还是抽象类是一个重要的决定。应尽可能在Java中使用接口来定义类型,因此自然的答案是Vehicle应该是一个接口,但是如果Vehicle中的实现细节对所有子类都是通用的,那么使用抽象类是不对的。
据我了解,您的问题是如何在一系列车辆中访问您车辆的属性。这是通过您的API完成的,您应该在编写任何类之前设计它。例如,假设Vehicle是一个界面:
public interface Vehicle {
setSize(int size);
int getSize();
setID(int ID);
int getID();
:
:
}
实现您的界面的类(例如,PedalDrivenVehicle和MotorizedVehicle)现在必须实现API(您设计的)的客户端可以用来访问所有Vehicle子类型的属性的所有这些接口方法。