Java - Problema herencia

 
Vista:

Problema herencia

Publicado por María (4 intervenciones) el 09/07/2009 09:48:06
Hola!

Tengo un problema de herencia. Tengo una clase con un algoritmo que he definido como genérico.. Todo con clase Object. Luego tengo la particularización para mi problema que extiende del algoritmo. Quiero q herede el método principal (el q dice q hacer al algoritmo) pero q las funciones a las que llama ese método sean las particulares de la clse q hereda. Cómo lo puedo hacer??

Pongo ejemplo simplificado de lo q tengo:

public class algoritmo {

[parametros]


public void algoritmo(...){
this.algoritmo(problema);
}

public ArrayList solucionAlgoritmo (...){
....
metodo1(problema);
.........
}

public void metodo1 (Problema problema){
.....
}
............
}

public class algoritmo1 extends backtracking{

[parametros especificos]

public algoritmo1 (...) {
super.solucionAlgoritmo(); -- Método que quiero usar del padre que llama a
-- métodos que quiero coger del hijo
}


public void metodo1 (Problema problema){
.....
}
}


Gracias!!!!!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Problema herencia

Publicado por James (207 intervenciones) el 09/07/2009 16:53:53
No se si entendi bien pero creo que hablas de algo asi como una calse abstracta, mejor lo ejemplifico

//Calse padre fijate que es una calse abstracta, sus metodos los implementara las herencias
public abstract class Operacion {

private double a;
private double b;

public Operacion(double a, double b) {
this.a = a;
this.b = b;
}

public double ejecutar(){
double out = accion1(this.a);
out += accion2(this.b);
out += accionConjunta(this.a, this.b);
return out;
};
///Estos metodos absatactos los defines en la herencia
protected abstract double accion1(double a);
protected abstract double accion2(double b);
protected abstract double accionConjunta(double a, double b);

}

//Ejemplo de herencia, esta implementa los metodos absatractos, esos mismos usa el padre
public class OperacionDemo extends Operacion{

public OperacionDemo(double a, double b) {
super(a, b);
}
///IMplemento los metodos abstractos con algun tipo de operacion de ejemplo
@Override
protected double accion1(double a) {
return -a;
}
@Override
protected double accion2(double b) {
return b * 2;
}
@Override
protected double accionConjunta(double a, double b) {
return a + b;
}

public static void main(String[] args) {
System.out.println("PRUEBA HERENCIA");
OperacionDemo op = new OperacionDemo(1.5, 2.5);
System.out.println("Resultado " + op.ejecutar());
}
}

Bueno esa seria la forma de mas comun de hacerlo, y la mas elegante por asi decirlo, ademas es la unica forma en que un padre accede a metodos del hijo.

Lo de definir algo generico con Object.. me parece que talves podrias mejorarlo usando Generics, bueno eso si se puede, Suerte
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema herencia

Publicado por María (4 intervenciones) el 09/07/2009 17:00:40
Ah.. claro.. no se me había ocurrido lo de clase abstracta! glups... lo de utilizar algo genérico... Es que es un algoritmo backtracking pero quiero hacer una clase que sea backtracking y otra que sea backtracking para mi caso concreto.. me parecería poco formal hacer directamente la clase del problema concreto porque el algoritmo es el mismo para cualquier problema... no sé si me explico...

Si al final no consigo q me salga lo haré simplemente con la clase backtracking del problema concreto...

Gracias!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar