Dados los siguientes fragmentos de código, responder a las siguientes preguntas:
public class ElementsSet<E> extends HashSet<E> {
//Number of attempted elements insertions using the "add" method
private int numberOfAddedElements = 0;
public ElementsSet() {}
@Override
public boolean add(E element) {
numberOfAddedElements++; //Counting the element added
return super.add(element);
}
@Override
public boolean addAll(Collection<? extends E> elements) {
numberOfAddedElements += elements.size(); //Counting the elements added
return super.addAll(elements);
}
public int getNumberOfAddedElements() {
return numberOfAddedElements;
}
} ...
ElementsSet<String> set = new ElementsSet<String>();
set.addAll(Arrays.asList("One", "Two", "Three"));
System.out.println(set.getNumberOfAddedElements());
...a) ¿Es el uso de la herencia adecuado para la implementación de la clase ElementsSet? ¿Qué salida muestra la función System.out.println al invocar el método getNumberOfAddedElements, 3 o 6?
b) En el caso de que haya algún problema en la implementación anterior, proponga una solución alternativa usando composición/delegación que resuelva el problema.
Dado los siguientes fragmentos de código responder a las siguientes preguntas:
public abstract class Animal {
//Number of legs the animal holds
protected int numberOfLegs = 0;
public abstract String speak();
public abstract boolean eat(String typeOfFeed);
public abstract int getNumberOfLegs();
}public class Cat extends Animal {
@Override
public String speak() {
return "Meow";
}
@Override
public boolean eat(String typeOfFeed) {
if(typeOfFeed.equals("fish")) {
return true;
} else {
return false;
}
}
@Override
public int getNumberOfLegs() {
return super.numberOfLegs;
}
}public class Dog extends Animal {
@Override
public String speak() {
return "Woof";
}
@Override
public boolean eat(String typeOfFeed) {
if(typeOfFeed.equals("meat")) {
return true;
} else {
return false;
}
}
@Override
public int getNumberOfLegs() {
return super.numberOfLegs;
}
} ...
Animal cat = new Cat();
Animal dog = new Dog();
System.out.println(cat.speak());
System.out.println(dog.speak());
...a) ¿Es correcto el uso de herencia en la implementación de las clases Cat y Dog? ¿Qué beneficios se obtienen?
b) En el caso de que el uso de la herencia no sea correcto, proponga una solución alternativa. ¿Cuáles son los beneficios de la solución propuesta frente a la original?