2015-09-23 57 views
0

因此,作爲項目的一部分,我必須使用一個類型爲Vehicle的數組,它被抽象爲2個子類動力化和踏板,然後有4個子類被變形。如何訪問變形類中的對象變量Java

我的問題如何訪問Vehicle類型的車輛對象數組中的變量。以下是顯示設置的部分當前代碼。

//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

也許我不明白你的問題,但它在我看來,你正在訪問像'vehicle [i] = new Bicycle();'這樣的行數組''vehicle'陣列元素分配一個新的'自行車對象進入數組'車輛'的第i個元素。 –

+0

@scottb然而,這個項目的描述方式是,Bicycle和它的姐妹子類三輪車(未顯示)使用自己的方法從Pedal和Override繼承了空的構造函數(setup())。我的教授教授的過程是什麼(在我看來,考慮到你可以使用4個子類並剪掉中間階級,這似乎是不必要的) –

+0

@RichardCmberss:是的,這是正確的。更簡單地提出我的問題是數據存在於數組媒體中,但我不確定如何訪問它以便我可以對信息進行分類。 –

回答

0

你的第一份工作應該是思考你的問題,定義問題域,然後從它的設計對象模型域。

你曾經說過,你的分解涉及一種車輛類型,它有兩個不同的子類型:PedalDrivenVehicle和MotorizedVehicle。注意:踏板對於這裏的子類型來說是一個非常糟糕的名字。從類型名稱來看,讀取代碼的任何人都很清楚PedalDrivenVehicle 車輛。

所以,你的代碼應該是這個樣子至今:

public interface Vehicle { ... } 

public abstract class PedalDrivenVehicle extends Vehicle { ... } 

public abstract class MotorizedVehicle extends Vehicle { ... } 

無論車輛應該是一個接口或抽象類是一個重要的決定。在Java中儘可能使用接口來定義類型,所以自然的答案是Vehicle應該是一個接口,但是如果Vehicle中的實現細節對於所有子類型都是通用的,那麼使用抽象類就不會出錯。

據我所知,你的問題是如何訪問您的車輛在一系列車輛的屬性。這是通過你的API完成的,你應該在編寫你的任何類之前進行設計。例如,假設車輛是一個接口:

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

實現你的接口(如PedalDrivenVehicle和MotorizedVehicle)現在必須實現所有的API(其中設計)的客戶端可以用它來訪問這些接口方法的類所有車輛子類型的屬性。

+0

好的,可以工作的問題,我預見這是其他子類使用略有不同的車輛變量列表,所以我只是定義所有不同的車輛變量,然後只分配和抓住我需要使用的變量? –

+0

Joshua Bloch表示*「你應該花費盡可能多的時間來設計你的API,因爲你應該爲你的類編寫代碼。」*確實,你的某些屬性只針對某些子類型(或子類型組)。您可以選擇:您可以在API中包含處理這些屬性的方法,並讓您的合同指定這些方法是可選的...或者...您可以編寫子類型特定的方法。後者更容易,但需要在代碼中使用強制轉換。如果你的層次設計得很好,你不應該有太多這樣的事情。 – scottb