Foros del Web » Programación para mayores de 30 ;) » Java »

Herencia en clases. Simple error.

Estas en el tema de Herencia en clases. Simple error. en el foro de Java en Foros del Web. Hola, tengo que hacer una clase "hija" de otra. Tengo un error que consiste en lo que voy a exponer a continuación. Tenemos la clase ...
  #1 (permalink)  
Antiguo 15/05/2012, 14:52
 
Fecha de Ingreso: mayo-2012
Mensajes: 9
Antigüedad: 11 años, 11 meses
Puntos: 1
Herencia en clases. Simple error.

Hola, tengo que hacer una clase "hija" de otra. Tengo un error que consiste en lo que voy a exponer a continuación.

Tenemos la clase "madre" llamada Empleados, de la cual van a nacer las clases TipoA y TipoB. Ambas clases van a compartir ciertos campos y por ello los introduzco en la clase Empleados, cuyo codigo es el siguiente:


public class Empleados
{
private String nombre;
private int dni;
private double sueldoBase;


public Empleados()
{ nombre="n";
dni=00000000;
sueldoBase=0;
}

public Empleados(double sb){
sueldoBase=sb;

}

public double getSueldoBase(){
return sueldoBase;


Código clase TipoA

public class TipoA extends Empleados
{
private double comisionFija;
private double sueldoFinal;
private double sueldoBaseA;

public TipoA()
{
comisionFija=0;
super (sb);
}


public int sueldoFinal(double sb, double cf){
{
super (sb);
sueldoFinal=1.10*sb + cf;


Lo que intento es hacer que el sueldo final de la clase TipoA sea 1.10 veces el sueldo base + la comision, pero el problema está en que me dice que sb y cf tienen acceso privado para la clase Empleados. ¿Alguien me puede decir cuál es el fallo y cómo se soluciona por favor?

Gracias.
  #2 (permalink)  
Antiguo 15/05/2012, 14:55
 
Fecha de Ingreso: mayo-2012
Ubicación: UK
Mensajes: 9
Antigüedad: 11 años, 11 meses
Puntos: 5
Respuesta: Herencia en clases. Simple error.

Cambia:

private String nombre;
private int dni;
private double sueldoBase;

por

protected String nombre;
protected int dni;
protected double sueldoBase;

Los atributos privados corresponden a una clase, pero no a sus hijas. Para ello existe protected, que si se puede heredar.
  #3 (permalink)  
Antiguo 15/05/2012, 15:12
 
Fecha de Ingreso: mayo-2012
Mensajes: 9
Antigüedad: 11 años, 11 meses
Puntos: 1
Respuesta: Herencia en clases. Simple error.

Lo he probado, pero ahora me aparece, (se me había olvidado)destacándose en rojo sb:

"call to super must be first statement in constructor". ¿Solución? Gracias.

¿Hay alguna otra manera de solucionarlo dejando los campos como private? Gracias.

PD.:Por cierto, se mehabía olvidado comentarlo antes, uso BlueJ.
  #4 (permalink)  
Antiguo 15/05/2012, 15:50
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 14 años, 11 meses
Puntos: 306
Respuesta: Herencia en clases. Simple error.

En los constructores la primera línea debe ser la llamada al super (un constructor de la clase base) o a otro constructor de la clase hija.

Normalmente los entornos de programación lo hacen automáticamente, pero a veces no lo pueden hacer, por ejemplo si la clase base no tiene el constructor por defecto.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #5 (permalink)  
Antiguo 15/05/2012, 17:00
 
Fecha de Ingreso: mayo-2012
Mensajes: 9
Antigüedad: 11 años, 11 meses
Puntos: 1
Respuesta: Herencia en clases. Simple error.

De acuerdo, pero ahora ocurre otro problema, dice que no encuentra la variable sb, aunque ya está definida en la clase super...
  #6 (permalink)  
Antiguo 16/05/2012, 01:40
 
Fecha de Ingreso: mayo-2012
Ubicación: UK
Mensajes: 9
Antigüedad: 11 años, 11 meses
Puntos: 5
Respuesta: Herencia en clases. Simple error.

No exactamente....


Si tu codigo es así:

public TipoA()
{
super (sb);
comisionFija=0;
}

sb no está definida en la clase hija, ni como parámetro del constructor, de hecho tampoco es un atributo de la clase padre.

Quizá quieres decir

public TipoA(double sb)
{
super (sb);
comisionFija=0;
}

O bien:

public TipoA()
{
super (0.0);
comisionFija=0;
}
  #7 (permalink)  
Antiguo 16/05/2012, 05:08
 
Fecha de Ingreso: mayo-2012
Mensajes: 9
Antigüedad: 11 años, 11 meses
Puntos: 1
Respuesta: Herencia en clases. Simple error.

No puedo poner double sb en el constructor: "Required no arguments" "Found: double"
  #8 (permalink)  
Antiguo 16/05/2012, 08:12
Avatar de farfamorA  
Fecha de Ingreso: noviembre-2010
Ubicación: Lima
Mensajes: 136
Antigüedad: 13 años, 5 meses
Puntos: 24
Respuesta: Herencia en clases. Simple error.

Pero sólo lee los errores y ya. Te dice "argumentos no requeridos, y sin embargo he encontrado un argumento double". Te pones a ver tu código: ¿Dónde podría yo haberle dado un argumento double a algo que no requiere argumentos?
Lo primero que ves es el constructor de la clase TipoA:
Código Java:
Ver original
  1. public TipoA(double sb) {
  2.         super(sb);
  3.         comisionFija = 0;
  4. }
Le estás dando el argumento double sb a super, que es la llamada al constructor de la clase padre. Pues bien, veamos como está definido el constructor de la clase padre:
Código Java:
Ver original
  1. public Empleados(){
  2.         nombre = "n";
  3.         dni = 00000000;
  4.         sueldoBase = 0;
  5. }
Ese constructor no recibe ningún argumento, y sin embargo al llamarle le estás pasando uno. ¿Solución? Varias, la más evidente: añádele ese argumento al constructor de la clase padre:
Código Java:
Ver original
  1. public Empleados(double sb){
  2.         nombre = "n";
  3.         dni = 00000000;
  4.         sueldoBase = sb;
  5. }
  #9 (permalink)  
Antiguo 16/05/2012, 09:44
Avatar de FiruzzZ  
Fecha de Ingreso: diciembre-2007
Ubicación: en casa
Mensajes: 470
Antigüedad: 16 años, 4 meses
Puntos: 41
Respuesta: Herencia en clases. Simple error.

cero sentido de investigación, autodidacta ni hablar..
¿te despertaste un día y dijiste .. ah! voy a programar en según la POO........?
__________________
BadProgrammerException!
  #10 (permalink)  
Antiguo 16/05/2012, 12:16
 
Fecha de Ingreso: mayo-2012
Mensajes: 9
Antigüedad: 11 años, 11 meses
Puntos: 1
Respuesta: Herencia en clases. Simple error.

Asunto solucionado. Gracias a todos los que intentaron ayudar, en especial a FarFamor, que ha sido quien ha dado con la clave de la solución. Adri, no es necesario cambiar los datos a protected, sino que funciona perfectamente en private pero gracias igualmente.

Es una lástima que a alguien que está intentando aprender a hacer algo, y que pregunta una duda del código en un lugar con miles de dudas, siempre haya quien busca provocar. Tener un mal día no es escusa para ser desagradable con los demás.
  #11 (permalink)  
Antiguo 16/05/2012, 13:13
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 8 meses
Puntos: 188
Respuesta: Herencia en clases. Simple error.

Firuzz nunca te había visto así, normalmente sueles tener más paciencia.

Al menos en este caso el usuario que hizo el post intentó hacer el código por sí mismo, y eso si que es importante y se debe valorar, porque en muchos casos la pregunta es... "me han mandado hacer este ejercicio y no tengo ni idea, ¿alguien me lo puede hacer?"

En esos casos se aceptaría la crítica, en este, lo intente solucionar bien o mal, al menos procura si criticas algo que sea constructivo, por ejemplo donde ves que puede fallar su código y cómo puede mejorarlo.

Espero verte de nuevo de mejor humor en otros mensajes, porque no me parece que seas así como te has mostrado esta vez :)
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}
  #12 (permalink)  
Antiguo 17/05/2012, 07:11
Avatar de zero0097  
Fecha de Ingreso: abril-2010
Ubicación: México
Mensajes: 481
Antigüedad: 14 años
Puntos: 69
Respuesta: Herencia en clases. Simple error.

Cita:
Iniciado por jorgerally Ver Mensaje
Es una lástima que a alguien que está intentando aprender a hacer algo, y que pregunta una duda del código en un lugar con miles de dudas, siempre haya quien busca provocar. Tener un mal día no es escusa para ser desagradable con los demás.
Pero también es cierto que requiere una investigación mínima o sentido de lógica, o conocimientos básicos de lo que se hace, da la impresión de que quieres correr sin saber caminar...

Ademas no te dijeron mucho que tu no pudieras ver, básicamente te tradujeron los errores al español, para que pudieras ver tu fallo, cosa que con google traductor (si no sabes inglés) puedes ver por ti mismo...

Mucha gente, dice: tengo este código y me sale error!!....pero no dicen ni que error, luego dice.......me da un error que dice "; expected" osea tampoco se la rifen, no pueden ir a un traductor y ver que dice "se esperaba ; en tal linea" y ya!

Saludos, y que bueno que funciona tu código, avispese más en POO
__________________
De nada, hay te encargo +1...
  #13 (permalink)  
Antiguo 17/05/2012, 13:53
 
Fecha de Ingreso: mayo-2012
Mensajes: 9
Antigüedad: 11 años, 11 meses
Puntos: 1
Respuesta: Herencia en clases. Simple error.

Una cosa es que entiendas lo que significa en español pero necesitaba saber cuál es lasolución, los errores que te dan, sale lo que está mal pero no la solución. Y sí he investigado pero no hallé la solución. No hablen sin saber y ayuden como la buena gente.
  #14 (permalink)  
Antiguo 18/05/2012, 07:24
Avatar de zero0097  
Fecha de Ingreso: abril-2010
Ubicación: México
Mensajes: 481
Antigüedad: 14 años
Puntos: 69
Respuesta: Herencia en clases. Simple error.

"call to super must be first statement in constructor" este es un error que te da la solución....
en español: llamar al super(constructor padre) debe ser la primera sentencia del constructor....

"Required no arguments" "Found: double" y este tambien es un error que te da la solución...
en español: "no se requieren argumentos....y se encontró un argumento double"

yo si ayudo, pero de veras en este caso los errores te dan la solución, en fin, lo bueno es que se arreglo tu problema y no te preocupes si en algo más se te puede ayudar se te ayudará... y disculpa si te sentiste ofendido no era mi intención..
__________________
De nada, hay te encargo +1...
  #15 (permalink)  
Antiguo 18/05/2012, 08:17
 
Fecha de Ingreso: mayo-2012
Mensajes: 9
Antigüedad: 11 años, 11 meses
Puntos: 1
Respuesta: Herencia en clases. Simple error.

Pero a lo que me refiero es que por ejemplo, ese error no te muestra que lo último que dijo el que me dio la solución, cambiar la clase padre, que ahí estaba el fallo en el que no había caído.
  #16 (permalink)  
Antiguo 18/05/2012, 09:22
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 14 años, 11 meses
Puntos: 306
Respuesta: Herencia en clases. Simple error.

No es por meter cizaña, pero sí te dice la causa del error, ¿de dónde crees que sacó la respuesta FarFamor? Lo que pasa es que hay que leerlos e interpretarlos.

Si esperas que los errores te digan exactamente qué es lo que está mal, desengáñate, eso no va a pasar casi nunca.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #17 (permalink)  
Antiguo 18/05/2012, 09:28
 
Fecha de Ingreso: mayo-2012
Mensajes: 9
Antigüedad: 11 años, 11 meses
Puntos: 1
Respuesta: Herencia en clases. Simple error.

Cita:
Iniciado por Xerelo Ver Mensaje
No es por meter cizaña, pero sí te dice la causa del error, ¿de dónde crees que sacó la respuesta FarFamor? Lo que pasa es que hay que leerlos e interpretarlos.

Si esperas que los errores te digan exactamente qué es lo que está mal, desengáñate, eso no va a pasar casi nunca.
Pues la interpretación es lo que andaba buscando ya que no es explícita, por lo tanto me estás dando la razón, ya que reconozco que no sém interpretarlo y por eso pregunto.
  #18 (permalink)  
Antiguo 18/05/2012, 15:28
Avatar de zero0097  
Fecha de Ingreso: abril-2010
Ubicación: México
Mensajes: 481
Antigüedad: 14 años
Puntos: 69
Respuesta: Herencia en clases. Simple error.

Bueno ya, AMLO para presidente y tu jorge a leer mas sobre el Paradigma Orientado a Objetos, te recomiendo Thinking in Java o algo asi, en español "pensando en java"....
__________________
De nada, hay te encargo +1...

Etiquetas: herencia
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:08.