2010-03-21 103 views
1

我需要創建類Dog和PurebredDog擴展Dog。問題是,狗可以在一次單一的對象和對象(狗和PurebreedDogs的數組:作爲數組的對象

Dog pack[]={new Dog(76589,"As","black",18, 
        "Ann","Kowalsky"), 
      new PurebreedDog(45321,"Labrador","Elf","black",25, 
          "Angus","Mati","Barbara","Smith"), 
      new Dog(102467,"Gamma","brown",89, 
        "Josh","Coke"), 
      new PurebreedDog(9678,"York","Theta","brown",8, 
        "Emka","Figaro","Alice","Cat")};  

for(int i=0; i < pack.length; i++) 
    System.out.println(pack[i]+"\n\n"); 

如何編寫正確的構造函數Dog 你可以這樣做:

public Dog(String name, etc){ 
} 

但怎麼寫構造狗的陣列?

public Dog(Dog[]tab) ? 

再怎麼記得它的要素是什麼?是pack[]一個二維數組?

+8

當前是什麼問題呢? – Bozho 2010-03-21 17:07:22

+0

我想他問,他怎麼能有一個構造函數接受無限期的參數。 – Pentium10 2010-03-21 17:10:34

+0

然後讓他問一下;)此外,就在今天,還有一個關於變量方法論點的問題。 – Bozho 2010-03-21 17:12:15

回答

5

爲了簡化事情,Dog的實例確實應該引用單個Dog。所以,你的構造應該類似於(數據類型只是例子):

Dog(int ID, String color, String name, ...) 

PurebreedDog將繼承Dog提供任何額外的構造函數的參數(和成員),如breed

爲了應對多個狗,我建議您將類的實例存儲在List,HashTable或其他類型的用於存放多個元素的數據結構中。您使用的實際結構將取決於您的要求。

1

在你的具體情況下,Dog應該代表一個狗,我同意賈斯汀的回答。

只是爲了完整性,我認爲值得一提的是composite pattern

確實有些情況下,對象聚合的行爲可能與其各個部分相同。傳統的例子是文件夾/文件層次結構。兩者都響應相同的方法,例如sizedelete等。

甚至可以與您一起使用Dog示例如果您計劃建立族譜樹模型。狗是狗,但可以有N孩子。

1

制定統一一隻狗和許多狗的表示方法是讓每個實體成爲一個列表。單狗實體只是一個列表中的一隻狗;當然,多犬實體中有一隻以上的狗。但是,您需要編寫的代碼是(單個)Dog,然後,如Justin和ewernli所說,使用Collection - 可能是Dog的ArrayList。

試圖讓未登記的單狗與狗的名單「相同」只是瘋狂。

+0

我知道,但我不是負責創建此任務的人:/ – owca 2010-03-21 23:07:13

0

好了,所以做了以下方法:

PurebreedDog類:

public class PurebreedDog extends Dog { 

private String breed; 
private String mother; 
private String father; 

public PurebreedDog(int id, String breed, String name, String color, int age, 
     String owner_name, String owner_surname, String mother, String father){ 
    super(id, name, color, age, owner_name, owner_surname); 
    this.breed = breed; 
    this.mother = mother; 
    this.father = father; 
} 

@Override 
public String toString(){ 
    return super.toString()+"\n Pure breed dog \n"+"-------------------------------\n"+ 
      "BREED: "+this.breed+"\n"+"MOTHER: "+this.mother+"\n"+ 
      "FATHER: "+this.father+"\n-------------------------------"; 
} 

} 

狗類:

public class Dog { 

private int id; 
private String name; 
private String owner_name; 
private String owner_surname; 
private String color; 
private int age; 
private Dog[]pack; 

public Dog(int i, String n, String c, int w, String on, String os){ 
    id = i; 
    name = n; 
    color = c; 
    age = w; 
    owner_name = on; 
    owner_surname = os; 
} 

public Dog(Dog[]p){ 

    Dog[]group = new Dog[p.length]; 
    for(int i=0; i < p.length; i++){ 
     group[i] = p[i]; 
    } 

    this.pack = group; 

} 

@Override 
public String toString(){ 

    return "-------------------------------\n"+ 
      "idr: "+this.id+"\n"+"OWNER: "+this.owner_name+ 
      this.owner_surname+"\n"+"NAME: "+this.name+"\n"+ 
      "color: "+this.color+"\n-------------------------------"; 
} 
相關問題