如何访问变形类Java中的对象变量

如何访问变形类Java中的对象变量,java,object,Java,Object,因此,作为项目的一部分,我必须使用一个类型车辆的数组,它被抽象为2个子类机动和踏板,然后有4个子类是变形的 我的问题是如何访问车辆类型的车辆对象数组中的变量。下面是显示设置的零件当前代码 //Main import java.io.*; import java.util.*; public class DatabaseMain { public static void main(String[] args) throws Exception { String inputString;

因此,作为项目的一部分,我必须使用一个类型车辆的数组,它被抽象为2个子类机动和踏板,然后有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;}

}
//Main
导入java.io.*;
导入java.util.*;
公共类数据库
{
公共静态void main(字符串[]args)引发异常
{
字符串输入字符串;
文件填充=新文件(args[0]);
扫描仪行计数器=新扫描仪(填充);
Scanner fileScan=新扫描仪(infle);
文件输出文件=新文件(args[1]);
PrintStream打印机=新的PrintStream(输出文件);
int lineCount=0;
while(lineCounter.hasNextLine())
{
lineCount++;
字符串linePoint=lineCounter.nextLine();
}
车辆[]车辆=新车[行数];
inputString=fileScan.nextLine();
字符串completeInputString=“”;
对于(int i=0;i

这是一幅显示数据如何存储在对象数组中的图像


注意:我不允许在此项目中使用ArrayList

您的第一项工作应该是思考您的问题,定义一个问题域,然后从中设计一个对象模型域

您已经说过,您的分解涉及一种车辆类型,它有两个不同的子类型:踏板驱动车辆和机动车辆。注意:对于这里的子类型,踏板是一个非常糟糕的名称。从类型名称中,任何阅读代码的人都可以清楚地看到,踏板驱动车辆是车辆

到目前为止,您的代码应该是这样的:

public interface Vehicle { ... }

public abstract class PedalDrivenVehicle extends Vehicle { ... }

public abstract class MotorizedVehicle extends Vehicle { ... }
车辆应该是接口还是抽象类是一个重要的决定。接口应该尽可能使用Java来定义类型,因此自然的答案是Vehicle应该是一个接口,但是如果Vehicle中有所有子类型通用的实现细节,那么使用抽象类就不会错

据我所知,您的问题是如何在一系列车辆中访问车辆的属性。这是通过API实现的,您应该在编写任何类之前设计API。例如,假设车辆是一个接口:

public interface Vehicle {
    setSize(int size);
    int getSize();
    setID(int ID);
    int getID();
    :
    :
}

实现接口的类(例如PedalDrivenVehicle和MotorizedVehicle)现在必须实现API(您设计的)客户端所使用的所有这些接口方法可以使用访问所有车辆子类型的属性。

也许我不理解您的问题,但我认为您正在访问数组
Vehicle
的数组元素,其行类似
Vehicle[I]=new Bicycle()
将一个新的
Bicycle
对象分配到数组
vehicle
@scottb的第i个元素中,看起来是这样的。然而,该项目的描述方式是,Bicycle及其姊妹子类Tricycle(未显示)从踏板继承空构造函数(setup()),并使用自己的方法重写。这是我的教授教授教授的过程。(在我看来,考虑到你可以只使用这4个子类,去掉中产阶级,这似乎是不必要的)@RichardChambers:是的,那是正确的。更容易提出我的问题的是,数据存在于阵列车辆中,但我不确定如何访问它,以便对信息进行排序。您能否改进实际问题和问题陈述,以便更好地解释您想要完成的任务?由于您的数据在一个数组中,并且您已经证明您知道如何访问数组的元素,因此我不知道您还需要什么。好的,这可能会解决我预见的问题,即其他子类对车辆使用的变量列表略有不同,那么,我会定义所有不同的车辆变量,然后只分配和获取我需要使用的变量吗?Joshua Bloch说过,“你应该花尽可能多的时间来设计API,就像你应该为你的类编写代码一样。”确实,你的一些属性只针对特定的子类型(或子类型组)。您可以选择:您可以在API中包含使用这些属性的方法,并让合同指定这些方法是可选的……或者……您可以编写特定于子类型的方法。后者更简单,但要求您在代码中使用强制类型转换。如果您的层次结构设计良好,您不应该有太多这样的内容。