Java - Clases abstractas y herencia.

 
Vista:

Clases abstractas y herencia.

Publicado por Serendipity (4 intervenciones) el 01/09/2005 22:29:11
Hola! tengo una duda con una aplicación que estoy haciendo. Resulta que tengo una clase Cuenta, una clase que hereda de Cuenta que se llama CuentaCorriente, lo mismo que CuentaAhorro y FondoInversion.
Quiero hacer que cada Cuenta "hija" de la clase "padre" Cuenta tenga el método "SacarDinero" pero que en cada una de las tres se calcule diferente.

Hasta ahí todo correcto. Pero el problema es que en el programa principal no puedo instanciar a cada una de las tres, sino que tengo que asignar una "Cuenta" en general a cada Titular (otra clase). Entonces, a la hora de llamar al método "SacarDinero", yo esperaba que ya se diferenciase si era de un tipo o en otro en particular. Pero no lo hace!

Probé a hacer la clse Cuenta abstract, pero claro, no puedo instanciarla tal cual en el programa principal, ... alguna sugerencia??? Gracias.
--------------------------------------------------------------------------
public class Cuenta implements Serializable {
....
public void SacarDinero(int dinero){
}
------------------------------------------------------------------------

public class CuentaCorriente implements Serializable {
....
public void SacarDinero(int dinero){
if (dinero>saldo) {
...
}
}
---------------------------------------------------------------------------
public class CuentaAhorro implements Serializable {
....
public void SacarDinero(int dinero){
if (dinero>(saldo-1000)) {
...
}
}
--------------------------------------------------------------------------
public class FondoInversion implements Serializable {
....
public void SacarDinero(int dinero){

}
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:Clases abstractas y herencia.

Publicado por Alberto (78 intervenciones) el 02/09/2005 09:38:35
Cuando creas una CuentaCorriente la tienes que declarar como Cuenta

Cuenta miCuenta = new Cuenta();
CuentaCorriente miCuentaCorriente = (CuentaCorriente) miCuenta;
miCuentaCorriente.getSacarDinero();

Prueba a hacer esto
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:Clases abstractas y herencia.

Publicado por Wilfredo Vargas Almendras (314 intervenciones) el 02/09/2005 15:25:40
Hola, bueno una pequeña observacion, en el codigo que publicas no estas heredando en tus clases hijas, de ninguna clase, en realidad te faltaria el extends, quiza por esto no funcione como quieres, ahora si no es este tu problema... podrias publicar tu clase principal para poder ayudarte de mejor forma....

SALUDOS Wilfredo Vargas
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:Clases abstractas y herencia.

Publicado por O. Alejandro (10 intervenciones) el 02/09/2005 16:34:13
Yo tengo un programa que hace algo parecido si lo quieres me dices. Y lo que dice Wilfredo es correcto (no estas haciendo herencia en ningún lado).
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

Yo otra vez...

Publicado por Código de las clases. (4 intervenciones) el 02/09/2005 17:10:34
package Model;

import java.io.Serializable;
import java.util.ArrayList;

public class Cuenta implements Serializable {
private int Saldo;
private int Punts;
private Client Titular;

//Constructor
public Cuenta(int s, int p,Client c){
this.Saldo=s;
this.Puntos=p;
this.Titular=c;
}

public Cuenta() {
super();
}

public void añadeSaldo (int dinero) {
Saldo=Saldo+dinero;
}

//ESTE ES EL METODO QUE VARIA EN CADA SUBCLASE.
// devuelve el saldo actual tras extraer el dinero solicitado.
public int retirarSaldo (int dinero) {
if (Saldo>0) {
Saldo=Saldo - dinero;
}
return (Saldo);
}

(...)
}
------------------------------------------------------------------------------------

package Model;

public class CuentaAhorro extends Cuenta {

public CuentaAhorro() {
super();
}

//ESTE ES EL METODO QUE VARIA EN CADA SUBCLASE.
// devuelve el saldo actual tras extraer el dinero solicitado y deja 1000 fijos!!.
public int retirarSaldo (int dinero) {
if (Saldo>1000) {
Saldo=Saldo - dinero;
}
return (Saldo);
}

(...)
}

-----------------------------------------------------------------------------------------
package Model;

public class CuentaVivienda extends Cuenta {

public CuentaVivienda() {
super();
}

//ESTE ES EL METODO QUE VARIA EN CADA SUBCLASE.
// devuelve el saldo actual tras extraer el dinero solicitado dejando 6000 como mínimo.
public int retirarSaldo (int dinero) {
if (Saldo>6000) {
Saldo=Saldo - dinero;
}
return (Saldo);
}

(...)
}

y lo mismo con la subclase FondoInversión.


Es que copié mal el código!! ups!. El problema como decía ayer, es que al introducir las cuentas, las leo de un fichero de texto. Y no puedo meter en el codigo: si Cuenta.tipo="CuentaCorriente" then... para decir que cree concretamente de un subtipo de cuenta y no una cuenta en general.... ya me entendeis... tengo que aprovechar "el potencial de java".
Cuando yo leo del fichero, hago Cuenta c=new Cuenta(a,b,c...); y le introduzco los parámetros, y así utilizo el constructor de Cuenta, pero parece que no me distingue el tipo de cuenta, así que no sé como hacerlo. Y si en el programa principal yo le digo
c.retirarSaldo(300), y en verdad es una CuentaVivienda, aunque haya sólo 350euros (siempre tendría que haber 6000 en este tipo de cuenta), me los saca sin problemas, pq ejecuta solo el método de la clase Cuenta.
El problema es que tengo que instanciar un tipo Cuenta para todas y que ejecute los métodos de cada uno en particular. Y no sé como hacerlo. Lo había intentado haciendo Cuenta una clase abstracta, pero no puedo instanciarla tal cual en el programa principal, claro.

No sé si lo he explicado bien...? Gracias por las respuestas...!
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

Como los diferencias

Publicado por Wilfredo Vargas Almendras (314 intervenciones) el 02/09/2005 17:57:09
La pregunta es como podrias saber que tipo de cuenta es?? cuando lees tu fichero, hay alguna forma si este es de algun tipo de cuenta en especial.. o como saber que tipo de cuenta es .. ???... una vez que me digas esto podre ayudarte.
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:Como los diferencias

Publicado por Serendipity (4 intervenciones) el 02/09/2005 18:01:18
Con un campo que se llama "Tipo", de tipo String, que puede ser CuentaAhorro,cuentaVivienda,...
y en cada Subclase en el constructor, pongo:

public CuentaVivienda() {
super();
this.Tipo="CuentaVivienda";
}

¿Se hace así o me he pasado de lista??
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:Como los diferencias

Publicado por Wilfredo Vargas Almendras (314 intervenciones) el 02/09/2005 18:16:19
Hola, esta bien.. entonces añadile lo siguiente a tu clase Cuenta:

public String getTipoCuenta(){
return Tipo;
}

Luego en la clase donde quieres calcular.... haces lo siguiente:

Cuenta c = new Cuenta(a,b,c....);

if( c.getTipoCuenta().equalsIgnoreCase("CuentaVivienda") )
((CuentaVivienda)c).retirarSaldo(x);

y lo mismo para las otras cuentas ...
espero te sea de ayuda...
SALUDOS Wilfredo Vargas Almendras
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