2014-01-28 2 views
-1

Я играю вокруг композиционных и абстрактных методов и классов .... Если у меня есть классы Animal, Cat и Dog, как бы я сделал другой класс с Animal list using composition ???animalList using composition

public class SomeClass{ 

Animal animalList; // ????? 

} 

.

public abstract class Animal { 


public abstract void sound(); 
} 

.

public class Cat extends Animal { 


     @Override 
    public void sound() { 

     System.out.println("cat makes sound"); 
    } 
    } 

.

public class Dog extends Animal { 


    @Override 
public void sound() { 

    System.out.println("dog makes sound"); 
} 
} 
+0

Что "список животных" вы говорите? – Behe

+0

Скорее всего, вам нужно будет объяснить свой вопрос более подробно и четко: классы, которые вы описываете, являются теми, которые вы изобрели, и поэтому трудно понять, чего вы от них хотите. –

+0

«SomeClass» - это действительно список животных. Для каждого созданного животного SomeClass выполняет функцию звука для каждого Животного в списке – Ris

ответ

1

Если вы пытаетесь использовать композитный узор, выглядит следующим образом.

http://en.wikipedia.org/wiki/Composite_pattern

interface Animal{ 
    void sound(); 
} 

class CompositeAnimal implements Animal { 
    List<Animal> animals; 

    @Override 
    public void sound() { 
     for (Animal animal : animals) { 
      animal.sound(); 
     } 
    } 
} 

class Dog implements Animal { 
    ... 
} 

class Cat implements Animal { 
    ... 
} 
1

Я думаю, что вы хотите что-то вроде этого

public class AnimalList{ 
    private List<Animal> list; 

    public addAnimal(Animal a) 
    { 
     if !(list instanceof List) 
     { 
      list = new List<Animal>(); 
     } 
     list.add(a); 
    } 
    //.. other stuff .. // 

} 

Однако я не думаю, что это как истинные отношения композиции. Да Список есть животное. Но я больше вижу отношения как AnimalList IS A List.

Я думаю, что лучшим примером композиции будет такой класс, как класс Person, у которого есть домашнее животное.

public class Person{ 
    private Animal pet; 
    public void poke_pet() 
    { 
      pet.sound(); 
    } 
} 

Reference