如何在多态类Java中访问对象变量

时间:2015-09-23 23:31:55

标签: java object

因此,作为项目的一部分,我必须使用一个类型为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

1 个答案:

答案 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子类型的属性的所有这些接口方法。