Java - AYUDA CON HERENCIA

 
Vista:
Imágen de perfil de TELPRO

AYUDA CON HERENCIA

Publicado por TELPRO (11 intervenciones) el 11/07/2017 23:42:16
Buenas noches, LWP, es mi primer post por aqui. Espero pueda resolver mis dudas ya que no se que hacer. Aca va...

He estado dandole a la POO en JAVA, he hecho varios programas de consola y por JOPTIONPANE. Ya me he metido con POO, y he estado disenando algunos programas basicos. Pero me he quedado estancado en la parte de HERENCIA en un programa de un banco basico...

El problema es el siguiente: Tengo la clase padre CUENTA que es donde estan las caracteristicas que comparten las dos(2) subclases AHORROS y CORRIENTE. Todo me corre excelente, el unico problema que no veo el error y he probado ya varias cosas es que, por ejemplo. En AHORROS se tiene la variable intereses (esta variable es unica, solo es utilizada para ahorros), y al momento de mostrarla en la clase padre CUENTAS me muestra un simple NULL...

El usuario ingresa: NOMBRE TITULAR, NUMERO DE CUENTA, TIPO DE CUENTA (si es AHORROS ingresa la tasa, si es CORRIENTE ingresa el minimo), SALDO DE LA CUENTA. Y con estos datos se deberian realizar las operaciones de intereses=tasa*saldo; //tasa y saldo son ingresados al principio del programa... Todo eso esta bien porque me lo muestra al momento de pedir que me muestre los datos de la cuenta, pero al momento de mostrar INTRESES solo muestra NULL. Y cabe destacar que SI guarda el valor de "tasa" en la memoria.

Aca coloco el codigo...

CLASE PADRE "CUENTAS" //unicamente la parte donde no me muestra el resultado de la operacion INTERESES. Lo demas (nombre, etc, si lo muestra)

1
2
3
4
5
6
if(tipo_cuenta1=="CORRIENTE"){
    JOptionPane.showMessageDialog(null,"El numero de cuenta es: "+numerocta+"\nEl nombre del titular es: "+titular+"\nEl tipo de cuenta es: "+tipo_cuenta1+"\nEl saldo disponible es de: "+saldo+"BsF\n");
    }
 
    if(tipo_cuenta1=="AHORROS"){
    JOptionPane.showMessageDialog(null,"El numero de cuenta es: "+numerocta+"\nEl nombre del titular es: "+titular+"\nEl tipo de cuenta es: "+tipo_cuenta1+"\nEl saldo disponible es de: "+saldo+"BsF\nUd presenta un monto de"+CuentaAhorros.intereses+"+BsF referente a los intereses");

Todo lo demas me lo muestra bien. Solo tengo el problema al momento de que no me muestra el monto de intereses...

SUB CLASE AHORROS.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public class CuentaAhorros extends Cuentas{ //herencia
 
      Double tasa;
      public static Double intereses; //constante
 
 
  //CONSTRUCTOR  
public CuentaAhorros() {
    this.tasa = tasa;
 
}
//GET Y SET
public void setTasa(Double tasa){
    this.tasa = tasa;
}
 
public Double getTasa(){
    return tasa;
}
 
public Double getIntereses(){
 
    return intereses; //REVISAR
}
 
} //fin de la clase

Entonces yo no entiendo por que no me muestra intereses. Si es un simple calculo facil con los datos que son introducidos al principio.

Entonces me surge la interrogante. Como hago para llamar los datos de una subclase a la clase padre? ya que utilize CuentasAhorros.interes; y sigue mostrando NULL. Espero haberme explicado y disculpen si es algo confuso, espero sus respuestas, 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
Imágen de perfil de Sebastian
Val: 282
Ha disminuido 1 puesto en Java (en relación al último mes)
Gráfica de Java

AYUDA CON HERENCIA

Publicado por Sebastian (91 intervenciones) el 12/07/2017 00:01:02
No entendi muy bien, pero el null que te aparece es por que estas declarando una varible a la cual no le esta dando ninngun valor, por tanto siempre es nula.

Dices que el interes es tasa*saldo, pero por lo visto no estas haciendo esa multiplicación.

opino que puedes intentar enviar el saldo al método getIntereses y retornar la multiplicacion,
algo así.

1
2
3
4
public Double getIntereses( double saldo){
 
    return tasa*saldo;
}

y para llamarlo seria...

1
nombreCuentaDeAhorros.getIntereses(saldo);

Espero te sirva :D
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
Imágen de perfil de TELPRO

AYUDA CON HERENCIA

Publicado por TELPRO (11 intervenciones) el 12/07/2017 00:18:35
Acabo de intentarlo y nada, me da error. El programa me guarda lo que es TASA Y SALDO, ya que ya pedi que me lo mostrara y si lo hace o sea si lo guarda. Pero no se como hacer para que me muestre intereses que seria la multiplicacion de tasa y saldo.

No se como hacer de pasar el resultado de esa operacion que se encuntra en la subclase CuentaAhorros a la clase padre para que la muestre. No se si es que estoy realizando mal en la subclase el calculo o en el metodo get.
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
Imágen de perfil de Sebastian
Val: 282
Ha disminuido 1 puesto en Java (en relación al último mes)
Gráfica de Java

AYUDA CON HERENCIA

Publicado por Sebastian (91 intervenciones) el 12/07/2017 01:35:35
creo que lo estas haciendo mal,
cuando tu creas herencia, heredas las variables de la clase superior a las subclases,
en este caso como es una CUENTA de tipo AHORROS, debes crear la cuenta AHORROS,
por medio del constructor le envias las variables a la clases superior y dentro de AHORROS,
haces las operaciones pertinentes a AHORROS.

Ejemplo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public class BankAccount{
        private String name;
        private String id;
        // y de mas cosas que tenga la cuenta bancaria
        public BankAccount(String name,String id){
                this.name=name;
                this.id=id;
        }
       // y los metodos para la cuenta bancaria
}
 
public class SavingsAccount extends BankAccount{
           //variables que pueda tener una cuenta de ahorros
           private double accountBalance;
          private double rate;//tasa y de mas
 
         public SavingsAccount(String name,String id,double rate, double accountBalance){
                super(name,id);
                this.rate=rate;
                this.accountBalance=accountBalance;
        }
        //metodos que hace una cuenta de ahorros
       public double getBankInterest(){
                return rate*accountBalance;
      }
}
 
//entonces en la clase donde ejecutas el programa, pides los datos de las cuentas y eso
public void validateData(){
        //ya sabiendo que es cuenta de ahorros entonces la creas y le envias los datos
       SavingsAccount savingsAccount= new SavingsAccount(name,id,rate,accountBalance);
       System.out.println("el interes es: "+ savingsAccount.getBankInterst());
}


Creo que maso menos la herencia se trabaja de este modo, no al reves como lo estas intentando hacer.

Por ciento Double es una clase, y double es un tipo de variable

Espero que te sirva :D
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

AYUDA CON HERENCIA

Publicado por Toni (7 intervenciones) el 19/07/2017 16:40:52
Buenas Telpro, como ha dicho Sebastián creo que estás utilizando al revés los pros de utilizar herencia.

Lo primero la referencia static es para poder acceder a lo que venga después ( sea clase, método o variable ) desde cualquier otra clase del proyecto ( siempre y cuando sea public) para poder utilizarlo cuando quieras.

A parte como bien dice Sebastián no inicializas la variable con ningún valor por lo tanto su valor será siempre null.

Si he entendido bien lo que necesitas te aconsejo esto:

1 - Quitarle la referencia static, declararla como variable primitiva ( es decir en vez de Double, le pones double) y cambias de public a private.

2- El método getter:

1
2
3
4
5
6
public double getIntereses(double saldo) {
 
this.intereses = saldo * this.tasa / 100;
 
return this.intereses;
}

Para acceder al método haces:
1
2
3
CuentaAhorro cuentaAhorro = new CuentaAhorro();
 
double interesesCuentaAhorro = cuentaAhorro.getIntereses(saldo);

Y luego pones en la cadena de string la variable interesesCuentaAhorro

(En saldo le pasas el double que quieras)

Si no me equivoco y te he entendido bien esto te debería funcionar.

Espero que te haya servido

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de TELPRO

AYUDA CON HERENCIA

Publicado por TELPRO (11 intervenciones) el 20/07/2017 19:50:32
Buenas!! Muchas gracias Sebastian y Toni, lo intente pero nada, la verdad no logro ver el error. Esto es lo que tengo:

EN EL MAIN DONDE GUARDO LOS DATOS TASA Y MINIMO:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//PREVIAMENTE HABER CREADO LOS OBJETOS:
 
    CuentaAhorros abrircuenta_aho = new CuentaAhorros(); //objeto cuenta ahorros
    CuentaCorriente abrircuenta_cte = new CuentaCorriente(); //objeto cuenta corrientes
 
//LUEGO DE UNAS LINEAS DE CODIGO DONDE ME GUARDABN LOS DEMAS DATOS LLEGO A DONDE GUARDO LA TASA Y EL MINIMO FLOTANTE.
 
 if(abrircuenta.tipo_cuenta == 'C' || abrircuenta.tipo_cuenta == 'c'){
                    cuenta = "Corriente";
                    System.out.println("CUENTA CORRIENTE. \nDigite la el minimo flotante: ");
                    abrircuenta_cte.setMinimo(input.nextDouble());
                } else {
 
                    cuenta = "Ahorros";
                    System.out.println("CUENTA AHORRO(S). \nDigite la tasa: ");
                    abrircuenta_aho.setTasa(input.nextDouble());
                }


CLASE PADRE CUENTAS:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
public void Datos(){
    String tipo_cuenta1 = null;
    //TIPO DE CUENTAS EN DATOS
    if(tipo_cuenta=='a' || tipo_cuenta=='A'){
        tipo_cuenta1="AHORROS";
    }
    if(tipo_cuenta=='c'||tipo_cuenta=='C'){
        tipo_cuenta1="CORRIENTE";
    }
    //FIN TIPO DE CUENTA EN DATOS
    if(tipo_cuenta1=="CORRIENTE"){
    JOptionPane.showMessageDialog(null,"El numero de cuenta es: "+numerocta+"\nEl nombre del titular es: "+titular+"\nEl tipo de cuenta es: "+tipo_cuenta1+"\nEl saldo disponible es de: "+saldo+"BsF\n");
    }
 
//AQUI ABAJO ME DA EL ERROR AL MMENTO DE "UD PRESENTA UN MONTO DE ..... BSF REFERENTE A LOS INTERES", LA ESTOY LLAMANDO BIEN CREO, Y NO ME DEJA TAMPOCO.
 
    if(tipo_cuenta1=="AHORROS"){
    JOptionPane.showMessageDialog(null,"El numero de cuenta es: "+numerocta+"\nEl nombre del titular es: "+titular+"\nEl tipo de cuenta es: "+tipo_cuenta1+"\nEl saldo disponible es de: "+saldo+"BsF\nUd presenta un monto de "+CuentaAhorros.getIntereses()+" +BsF referente a los intereses");
 
 
    }
}
 
 
public void retirar(){
 
    retiro = Double.parseDouble(JOptionPane.showInputDialog("Ingrese el monto a retirar"));
    if (retiro > saldo || retiro < 0){
        JOptionPane.showMessageDialog(null, "MONTO INSUFICIENTE...");
        } else {
            saldo = saldo - retiro;
        }
 
//AQUI ABAJO ME DA EL ERROR CUANDO INTENTO COMPARAR CON EL VALOR DE LA VARIABLE MINIMO (NO ESTATICA) NO ME DEJA LLAMARLA Y COMPARARLA...
 
            if((tipo_cuenta == 'C' || tipo_cuenta == 'c') && (saldo<CuentaCorriente.minimo)){
                saldo = saldo-100;
 
            }
     JOptionPane.showMessageDialog(null,"Monto retirado: "+retiro+"BsF."+"\nMonto disponible: "+saldo+"BsF.");
    }

En la clase padre colocandola static me mostraba unicamente el saldo de 0.0, no realizaba la operacion. Quitando el static me marca el error de: "Non-static variable/method cannot be referenced from a static context"... Eso en las lineas de codigo ya recalcada arriba!





MIS SUBCLASES:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class CuentaAhorros extends Cuentas{ //herencia
 
 private double tasa;
 
  //CONSTRUCTOR  
public CuentaAhorros() {
    this.tasa = tasa;
 
}
//getter y setter
public void setTasa(double tasa){
    this.tasa = tasa;
}
public double getTasa(){
    return tasa;
}
 
public double getIntereses(){
    return saldo*this.tasa/100;
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class CuentaCorriente extends Cuentas{ //herencia
 
    double minimo = 0;
 
 
//constructor
public CuentaCorriente(){
    this.minimo = minimo;
}
 
//getter y setter
public void setMinimo(double minimo){
    this.minimo = minimo;
 
}
public double getMinimo(){
    this.minimo = minimo*saldo;
    return minimo;
}
 
} //fin de la clase

Mil disculpas la verdad no encuentro el error, no se si es un error de conceptos... Espero me ayuden, la verdad no se por que con static no me funcionan, muchas gracias por su tiempo. Saludos
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
sin imagen de perfil
Val: 755
Bronce
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

AYUDA CON HERENCIA

Publicado por Yamil Bracho (2315 intervenciones) el 20/07/2017 20:00:59
Un vistazo previo a tu codigo, tienes una compracion de String con ==. Debe hacerse con equals o equalsIgnoerCase(). Asi te quedaria
De esto
if(tipo_cuenta1=="CORRIENTE"){
a
if( "CORRIENTE".equalsIgnoreCase(tipo_cuenta1)) {
....


Asi tambien con AHORROS...
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

AYUDA CON HERENCIA

Publicado por Toni (7 intervenciones) el 20/07/2017 23:26:11
Jajajajajajaj no te preocupes siempre hay que aprender en este mundillo.

He de decirte que veo lagunas con este código , pero por lo general creo que tienes mal estructurada la clase padre y que tienes al revés el concepto de herencia.


Lo del mínimo podría ser que se te haya olvidado hacer el getter?

Si quieres envíame el proyecto y le hecho un vistazo
por qué así es un poco complicado

[email protected]
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de TELPRO

AYUDA CON HERENCIA

Publicado por TELPRO (11 intervenciones) el 21/07/2017 00:24:21
Jajaja muchas gracias por el ánimo Toni, ya te he envíado un e-mail! Espero puedas responder, saludos!!
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
Imágen de perfil de gonzalo mosquera
Val: 35
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

AYUDA CON HERENCIA

Publicado por gonzalo mosquera (22 intervenciones) el 22/07/2017 05:45:46
Hola, estoy interesado en aprender y su proyecto es muy interesante. Por favor comparta si pudo solucionar el error para aprender cómo se hace. 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
Imágen de perfil de TELPRO

AYUDA CON HERENCIA

Publicado por TELPRO (11 intervenciones) el 27/07/2017 01:26:50
Buenas noches Gonzalo!! Si lo logre solucionar, gracias a mi compañero de LWP Toni y Sebastian, que han comentado mas arriba. Ya he solucionado el problema, era de teoria mas que todo. Toni y mi persona hemos entablado una conversacion mediante email, breve pero muy educativa en la que me señalo mis errores y con mucho gusto me explico los mismos. Tenia mezclado algunos conceptos y no habia entendido del todo HERENCIA. Aparte he aprendido lo que es clases abstractas y su uso.

De antemano, muchas gracias a Toni. Aun me falta mucho que recorrer en este lenguaje, y cada vez me gusta más!!

Si quieres me dejas tu correo Gonzalo, para hacerte llegar el enunciado y codigo. Saludos desde Venezuela
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar