Problema de examen. Interfaces

Joni
07 de Agosto del 2003
Es una pregunta de examen que me interesa resolver pero que no logro hacerlo, igual alguien me puede ayudar. Dice asi:

A continuación se muestran las partes públicas de las clases A y B junto con el interface C. Ambas clases disponen del método

public C metodoCabron() {...}

que tiene que devolver un objeto cuya clase implemente C y que sepa añadir un elemento en el objeto al que se lo hemos solicitado. Más abajo se muestra un fragmento de código que ilustra qué es lo que se pretende conseguir. Implementa las clases necesarias y el miembro metodoCabron de las clases A y B para que esto sea posible.

class A
{
public boolean metodo1(float f) {...}
public void metodo2(float elemento) {...}
public C metodoCabron() {...}
}


class B
{
public void metodo3 (float f) {...}
public int metodo4 () {...}
public C metodoCabron() {...}
}

interface C
{
public void add (float f) {...}
}

...................

A a=new A();
B b=new B();
...
if (...) c=a.metodoCabron();
else c=b.metodoCabron();
c.add(1.25); // tal numero será añadido a a o b según la condición
.............................


NOTA: Las dos clases A y B no tienen relación de herencia ni de nada, y no se pueden modificar.

¿Algún experto que lo tome como un pasatiempos? Muchas gracias de antemano.

GoogleMan
07 de Agosto del 2003
class A{
...
public C metodoCabron(){
return new D(this);
}
}

public B{
...
public C metodoCabron(){
return new E(this);
}
}

class D implements C{
private A a = null;

public D(A _a){
a = _a;
}

pubilc void add(float ff){
a.add(ff); // aquí utilizamos el método que tenga A para sumar
}
}

class E implements C{
private B b = null;

public E(B _b){
b = _b;
}

pubilc void add(float ff){
b.add(ff); // aquí utilizamos el método que tenga B para sumar
}
}


Esta creo que es la forma más sencilla de hacerlo, aunque hay otras formas más elegantes coo utilizar una única clase que implemente C y que mediante reflection sepa qué clase la ha creado y así poder llamar al método adecuado.

Un saludo