Объект как массив - PullRequest
       11

Объект как массив

1 голос
/ 21 марта 2010

Мне нужно создать класс Dog и PurebredDog, расширяющий Dog. Проблема в том, что Dog может быть одновременно одним объектом и массивом объектов (Dogs и 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[] 2d массив?

Ответы [ 4 ]

5 голосов
/ 21 марта 2010

Чтобы упростить вещи, экземпляр Dog действительно должен ссылаться на одного пса.Поэтому ваш конструктор должен выглядеть примерно так (типы данных - только примеры):

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

PurebreedDog будет подклассом Dog и предоставит любые дополнительные параметры конструктора (и члены), такие как breed и т. Д.

Чтобы иметь дело с несколькими собаками, я рекомендую хранить экземпляры класса в List, HashTable или другом типе структуры данных, предназначенной для хранения нескольких элементов.Фактическая структура, которую вы используете, будет зависеть от ваших требований.

1 голос
/ 21 марта 2010

Способ сделать единообразным представление одной собаки и множества собак состоит в том, чтобы каждая сущность была списком.Сущность с одной собакой - это просто список с одной собакой;у сущности с несколькими собаками, конечно, есть больше чем одна собака.Но все, что вам нужно для кодирования, - это (одиночная) собака, а затем, как сказали Джастин и Эвернли, используйте коллекцию - возможно, ArrayList of Dog."Список собак просто сумасшедший.

1 голос
/ 21 марта 2010

В вашем конкретном случае Dog должен представлять одну собаку, и я согласен с ответом Джастина.

Просто ради полноты, я думаю, что стоит упомянуть составной шаблон .

Действительно, существуют некоторые обстоятельства, когда совокупность объектов может действовать так же, как и его отдельные части. Традиционным примером является иерархия папок / файлов. Оба реагируют на одни и те же методы, такие как size, delete и т. Д.

Это может даже использоваться с вами Dog пример, если вы планируете моделировать генеалогическое дерево. Собака есть собака, но может иметь N детей.

0 голосов
/ 22 марта 2010

Хорошо, так было и так:

Класс 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-------------------------------";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...