post #1 (permalink) Antiguo 15-ago-2009, 18:57
Predeterminado OOP principiante

Partiendo de estas 3 clases y sabiendo que la clase Alumno hereda de Persona.
La clase Alummno hereda las variables codigo y nombre de la clase Persona.


/* Uso extends para declarar que Alumno está heredando de Persona */
public class Alumno extends Persona
{
/*
Declaro ahora los datos de Alumno, note que nombre y dni no las
debo declarar porque los heredo
*/
private float notaPrimerParcial;
private float notaSegundoParcial;
public Alumno(int codigo, String nombre, float notaPrimero,
float notaSegundo)
{
/* con super hago referencia a la variable nombre de la clase padre */
super.nombre = nombre;
/*
Como dni era privado, debo acceder a él a través del método
setDni
*/
super.setCodigo(codigo);
/* Inicializo las variables de Alumno */
this.notaPrimerParcial = notaPrimero;
this.notaSegundoParcial = notaSegundo;
}
/*
Calcula el promedio, note que es privado por lo tnato no se podrá
llamar desde afuera
*/
private float getPromedio()
{
return((this.notaPrimerParcial+this.notaSegundoPar cial)/2);
}
public void mostrar()
{
/*
Uso mostrar de la superclase y agrego lo que necesito mostar
de Alumno
*/
super.mostrar();
System.out.println("Promedio: "+this.getPromedio());
}
}


public class Persona
{
/*
Note la declaración de las variables dni es private y nombre
protected
*/
private int codigo;
protected String nombre;
/* En el constructor no hago nada */
public Persona()
{
}
/*
Necesito dos métodos (get y set) para poner y sacr el valor
del dni ya que éste es privado
*/
public void setCodigo(int codigo)
{
this.codigo = codigo;
}
public int getCodigo()
{
return(this.codigo);
}
/*Por prolijidad también agrego los métodos para acceder al nombre */
public void setNombre(String nombre)
{
this.nombre = nombre;
}
public String getNombre()
{
return(this.nombre);
}
/* Este método muestra los datos de la persona */
public void mostrar()
{
System.out.println("Codigo: "+this.codigo);
System.out.println("Nombre: "+this.nombre);
}
}


public class PruebaHerencia
{
public PruebaHerencia()
{
}
public static void main (String argv[])
{
/* Creo una instancia de Alumno y la referencio con la variable a */
Alumno a = new Alumno(1,"Pedro",10,5);
System.out.println("----Alumno----");
/* Hace referencia al método mostrar de alumno*/
a.mostrar();
/*
Vea que puedo llamar al método getNombre con la instancia de
alumno porque el método fue heredado de Persona
*/
System.out.println("El alumno es: "+a.getNombre());
/*
Vea, también, que puedo instanciar una Persona y usarla
sin problemas
*/
System.out.println("----Persona----");
Persona p = new Persona();
p.setNombre("Juan");
p.setCodigo(10);
/* Hace referencia al método mostrar de persona */
p.mostrar();
}
}
Y ejecutando PruebaHerencia tengo la siguiente salida:

----Alumno----
Codigo: 1
Nombre: Pedro
Promedio: 7.5
El alumno es: Pedro
----Persona----
Codigo: 10
Nombre: Juan

Ahora quiero que de la clase Persona se herede ademas de la clase Alumno, haya otra clase nueva llamada Profesor,
y que el programa principal muestre los datos del profesor con los demas datos, usando siempre las variables
codigo y nombre de la clase Persona.

----Un Profesor----
Codigo: 3
Nombre: Guillermo
Puntaje: 125
Años de experiencia: 8


Usando las clases


/* Uso extends para declarar que Alumno está heredando de Persona */
public class Profesor extends Persona
{
/*
Declaro ahora los datos de Alumno, note que nombre y dni no las
debo declarar porque los heredo
*/
private int puntaje;
private int experiencia;

public Profesor(int codigo, String nombre, float puntaje, float experiencia)
{

/*
Como dni era privado, debo acceder a él a través del método
setDni
*/
super.setCodigo(codigo);

/* con super hago referencia a la variable nombre de la clase padre */
super.nombre = nombre;


}

public int getPuntaje() {
return puntaje;
}
public void setPuntaje(int puntaje) {
this.puntaje = puntaje;
}


public int getExperiencia() {
return experiencia;
}

public void setExperiencia(int experiencia) {
this.experiencia = experiencia;
}


public void muestraProfe()
{
//System.out.println("Codigo: "+this.codigo);
System.out.println("Nombre: "+this.nombre);

System.out.println("Puntaje: "+this.puntaje);
System.out.println("Años de experiencia: "+this.experiencia);

}
}

package com.micasa.practica.libro.users.herencia_pruebota;
public class PruebaHerencia
{
public PruebaHerencia()
{
}
public static void main (String argv[])
{
/* Creo una instancia de Alumno y la referencio con la variable a */
Alumno a = new Alumno(1,"Pepe",10,5);
System.out.println("----Alumno----");
/* Hace referencia al método mostrar de alumno*/
a.mostrar();

System.out.println("----Otro Alumno----");
Alumno b = new Alumno(2,"Juan",9,5);
b.mostrar();

System.out.println("----Un Profesor----");
Profesor p = new Profesor(3,"Guillermo",125,8);
p.muestraProfe();

}
}

y las demas clases quedan igual.

En la linea "System.out.println("Codigo: "+this.codigo); "de la metodo muestraProfe me tira un error "The Field Pesrona.codigo is not visible"
al ejecutar me tira el eclipse el siguiente mensaje:

----Alumno----
Codigo: 1
Nombre: Pepe
Nota 1: 10.0
Nota 1: 5.0
Suma de notas: 15.0
Promedio: 7.5
----Otro Alumno----
Codigo: 2
Nombre: Juan
Nota 1: 9.0
Nota 1: 5.0
Suma de notas: 14.0
Promedio: 7.0
----Un Profesor----
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The field Persona.codigo is not visible

at com.micasa.practica.libro.users.herencia_pruebota. Profesor.muestraProfe(Profesor.java:56)
at com.micasa.practica.libro.users.herencia_pruebota. PruebaHerencia.main(PruebaHerencia.java:21)

Y si pongo como comentario esa linea (al del error)me ejecuta de la siguiente forma:

----Alumno----
Codigo: 1
Nombre: Pepe
Nota 1: 10.0
Nota 1: 5.0
Suma de notas: 15.0
Promedio: 7.5
----Otro Alumno----
Codigo: 2
Nombre: Juan
Nota 1: 9.0
Nota 1: 5.0
Suma de notas: 14.0
Promedio: 7.0
----Un Profesor----
Nombre: Guillermo
Puntaje: 0
Años de experiencia: 0

Como hago que me muestre los datos del profesor heredando las variables codigo y nombre de la clase Persona y mostrando
las variables puntaje y experiencia de la clase Profesor? Recien estoy empezando con la OOP en Java y hay cosas que
me confunden.

Muchas gracias











Usuario Registrado
Fecha de Ingreso: ene-08
Mensajes: 19
Gracias dadas: 0
Agradecido 0 veces en 0 Mensajes
Enviar un mensaje por MSN a andoporto Enviar un mensaje por Yahoo  a andoporto
andoporto está desconectado
Responder Citando
post #2 (permalink) Antiguo 18-ago-2009, 10:03
Predeterminado Re: OOP principiante
Saludos, al parecer tu error es que en el procedimiento muestraProfe tratas de acceder al valor codigo directamente llamandolo con this como si este se hubiese heredado lo que cual no ha sido puesto que es privado lo que podrias hacer seria cambiar esa variable a protegida para asi acceder ha ella de esa manera o sino crear un metodo por el cual acceder a ella.
Algo parecido a este:

En la clase persona añades:
Cita:
public int getCodigo(){
return codigo;
}
Aunque tambien si quieres usar el procedimiento mostrar() no deberias usar muestraProfe sino sobrecargar mostrar() de esta manera.

En la clase profesor añades este procedimiento:

Cita:
public void mostrar(){
super.mostrar();
System.out.println("Puntaje: "+this.puntaje);
System.out.println("Años de experiencia: "+this.experiencia);
}
Un sugerencia en vez de usar eclipse usa netbeans pues las notificacion del compilador son mas intuitivas.

Saludos.
Usuario Novato
Fecha de Ingreso: ago-07
Mensajes: 84
Gracias dadas: 0
Agradecido 0 veces en 0 Mensajes
Enviar un mensaje por MSN a lanstat
lanstat está desconectado
Responder Citando
Respuesta

Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Ir al Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
PRINCIPIANTE maxiiixam LINUX y Software Libre 4 08-nov-2008 14:25
Principiante! Mauriccio Programación 0 28-ene-2007 23:00
Principiante YoYo_Help LINUX y Software Libre 4 01-may-2005 00:00
Soy un principiante ferrabone Webmasters 1 23-abr-2004 00:00
Consulta de principiante synkro_ar Audio/Video 1 29-mar-2004 23:00


La franja horaria es GMT -3. Ahora son las 04:02.