Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - Enzo

Páginas: 1 [2] 3 4 5
21
Hola Mario,

Muchas gracias,

La verdad es que me parece un curso muy bueno para introducirnos en este mundo de la programación en Java y se hace muy ameno seguirlo. ¡Claro! siempre hay algunos conceptos que cuestan más que otros y hay que echarle algún rato mas ¿verdad?
Y saber que siempre estáis vosotros ahí para resolver las dudas, ayuda mucho a la hora de no tirar la toalla.

Voy a hacerme un resumen de lo visto y, en breve, quiero ponerme con el de nivel avanzado I.

De verdad quiero agradeceros la ayuda y los consejos a ti, a Pedro, a Lorenzo31, a Ogramar, Alex Rodríguez y a todos los que habéis estado ahí.

Saludos,


22
Hola Mario,

¡¡¡Vamos, que no he dado una!!!. La verdad es que cuesta pillarlo.

Me voy a repasar el tema y a mirar el link que me dejas.

Muchas gracias,

Un Saludo,


23
Hola guillerub2001,

El error que te da es porque estas realizando una llamada a un método llamado setMatricula del objeto Taxi, pero no tienes creado este método en el objeto.
En la clase Taxi solo has creado los métodos getters, pero no los setters.

Créalo y veras como se solucionara el problema,

Animo,

Un Saludo,

24
Hola,

Aquí dejo mi ejercicio del Tema "CU00697B para que sirven interfaces java implementar api ventaja ejemplo" para su corrección:

Clase InstalacionDeportiva:
Código: [Seleccionar]
/**
 * EJERCICIO DE HERENCIAS Y CLASES INTERFACES.<br>
 * Esta Clase define una clase Interface de la que "beberan" otras clases.<br>
 * Clase 1 del Ejercicio del Tema "CU00697B para que sirven interfaces java implementar api ventaja ejemplo".
 * @author Lorenzo Fernández Asensio
 * @version 20151211.01
 */
public interface InstalacionDeportiva_CU00697B {
    // No hay Atributos
   
    /**
     * Método (Por defecto abstract public) para obtener el Tipo de Instalación es
     */
    int getTipoDeInstalacion();
   
} //Cierre de la interface

Clase Edificio:
Código: [Seleccionar]
/**
 * EJERCICIO DE HERENCIAS Y CLASES INTERFACES.<br>
 * Esta Clase define una clase Interface de la que "beberan" otras clases.<br>
 * Clase 2 del Ejercicio del Tema "CU00697B para que sirven interfaces java implementar api ventaja ejemplo".
 * @author Lorenzo Fernández Asensio
 * @version 20151211.01
 */
public interface Edificio_CU00697B {
    // No hay Atributos
   
    /**
     * Método (Por defecto abstract public) para obtener la Superficie del Edificio
     */
    double getSuperficieEdificio();
   
} //Cierre de la interface

Clase Polideportivo:
Código: [Seleccionar]
/**
 * EJERCICIO DE HERENCIAS Y CLASES INTERFACES.<br>
 * Esta Clase define una Subclase que implementa las interfaces InstalacionDeportiva_CU00697B y Edificio_CU00697B.<br>
 * Clase 3 del Ejercicio del Tema "CU00697B para que sirven interfaces java implementar api ventaja ejemplo".
 * @author Lorenzo Fernández Asensio
 * @version 20151212.01
 */
public class Polideportivo_CU00697B implements InstalacionDeportiva_CU00697B, Edificio_CU00697B {

    // Inicialización de Atributos
    private String nombre;
    private double superficie;
    private int tipoInstalacion;

    /**
     * Constructor 1 del Polideportivo - Atribututos solo con asignación del Valor del Tipo de Instalación
     * @param nombre El parámetro nombre define el Nombre del Polideportivo
     * @param superficie El parámetro superficie define la Superficie del Polideportivo
     * @param tipoInstalacion El parámetro tipoInstalacion define Polideportivo como Tipo de Instalación 1
     */
    public Polideportivo_CU00697B () {
        nombre = "";
        superficie = 0;
        tipoInstalacion = 1; // Polideportivo es un Tipo de Instalación 1
    } // Cierre del Constructor 1

    /**
     * Constructor 2 del Polideportivo - Atribututos con asignación de Valores
     * @param nombre El parámetro nombre define el Nombre del Polideportivo
     * @param superficie El parámetro superficie define la Superficie del Polideportivo
     * @param tipoInstalacion El parámetro tipoInstalacion define Polideportivo como Tipo de Instalación 1
     */
    public Polideportivo_CU00697B (String nombre, double superficie) {
        this.nombre = nombre;
        this.superficie = superficie;
        tipoInstalacion = 1; // Polideportivo es un Tipo de Instalación 1
    } // Cierre del Constructor 2

    /**
     * Método para establecer el Nombre del Polideportivo
     * @param nombre El parámetro nombre define el Nombre del Polideportivo
     */
    public void setNombre (String nombre) {
        this.nombre = nombre;
    } // Cierre del método para establecer el Nombre del Polideportivo

    /**
     * Método para establecer la Superficie del Polideportivo
     * @param superficie El parámetro superficie define la Superficie del Polideportivo
     */
    public void setSuperficie (double superficie) {
        this.superficie = superficie;
    } // Cierre del método para establecer la Superficie del Polideportivo

    /**
     * Método para obtener el Nombre del Polideportivo
     * @return El Nombre del Polideportivo
     */
    public String getNombre() {
        return nombre;
    } // Cierre del método para ver que Tipo de Instalación es

    /**
     * Método para obtener la Superficie del Polideportivo (Sobreescrito de la interface Edificio)
     * @return La Superficie del Edificio
     */
    public double getSuperficieEdificio() {
        return superficie;
    } // Cierre del método para ver que Tipo de Instalación es

    /**
     * Método para obtener el Tipo de Instalación es el Polideportivo (Sobreescrito de la interface InstalacionDeportiva)
     * @return El Tipo de Instalación que es
     */
    public int getTipoDeInstalacion() {
        return tipoInstalacion;
    } // Cierre del método para ver que Tipo de Instalación es

    /**
     * Método para obtener los Datos del Polideportivo
     * @return Los Datos del Polideportivo
     */
    public String toString(){
        // Se transforman superficie para poder aplicarle el método toString().
        Double datoSuperficie = superficie;
        /* Se transforman tipoInstalacion en Integer para poder aplicarle el método toString().
         * De otra manera no se" puede hacer por ser de tipo primitivo.*/
        Integer datoTipoInstalacion = tipoInstalacion;
        // Se devuelve uns String con los datos del Polideportivo
        return "EDIFICIO DE TIPO ".concat(datoTipoInstalacion.toString()).concat(" = POLIDEPORTIVO.\n\t- Nombre del polideportivo: ").concat(nombre)
        .concat("\n\t- Con una Superficie de: ").concat(datoSuperficie.toString()).concat(" m2.\n");
    }

} //Cierre de la clase

Clase EdificioDeOficinas:
Código: [Seleccionar]
/**
 * EJERCICIO DE HERENCIAS Y CLASES INTERFACES.<br>
 * Esta Clase define una Subclase que implementa la interfaces Edificio_CU00697B.<br>
 * Clase 4 del Ejercicio del Tema "CU00697B para que sirven interfaces java implementar api ventaja ejemplo".
 * @author Lorenzo Fernández Asensio
 * @version 20151212.01
 */
public class EdificioDeOficinas_CU00697B implements Edificio_CU00697B {

    // Inicialización de Atributos
    private double superficie;
    private int numDeOficinas;

    /**
     * Constructor 1 del Edificio De Oficinas - Atribututos sin asignación del Valores
     * @param superficie El parámetro superficie define la Superficie del EdificioDeOficinas
     * @param numDeOficinas El parámetro numDeOficinas define el Número de Oficinas que tiene el Edificio
     */
    public EdificioDeOficinas_CU00697B () {
        superficie = 0;
        numDeOficinas = 0;
    } // Cierre del Constructor 1

    /**
     * Constructor 2 del EdificioDeOficinas - Atribututos con asignación de Valores
     * @param superficie El parámetro superficie define la Superficie del EdificioDeOficinas
     * @param numDeOficinas El parámetro numDeOficinas define el Número de Oficinas que tiene el Edificio
     */
    public EdificioDeOficinas_CU00697B (double superficie, int numDeOficinas) {
        this.superficie = superficie;
        this.numDeOficinas = numDeOficinas;
    } // Cierre del Constructor 2

    /**
     * Método para establecer la Superficie del EdificioDeOficinas
     * @param superficie El parámetro superficie define la Superficie del EdificioDeOficinas
     */
    public void setSuperficie (double superficie) {
        this.superficie = superficie;
    } // Cierre del método para establecer la Superficie del Edificio De Oficinas
   
    /**
     * Método para establecer el Número de Oficinas que tiene el Edificio
     * @param numDeOficinas El parámetro numDeOficinas define el Número de Oficinas que tiene el Edificio
     */
    public void setNumDeOficinas (int numDeOficinas) {
        this.numDeOficinas = numDeOficinas;
    } // Cierre del método para establecer el Número de Oficinas que tiene el Edificio
   
    /**
     * Método para obtener la Superficie del Edificio de Oficinas (Sobreescrito de la interface Edificio)
     * @return La Superficie del Edificio
     */
    public double getSuperficieEdificio() {
        return superficie;
    } // Cierre del método para ver que Tipo de Instalación es
   
    /**
     * Método para obtener el Número de Oficinas que tiene el Edificio
     * @return El Número de Oficinas que tiene el Edificio
     */
    public int getNumDeOficinas() {
        return numDeOficinas;
    } // Cierre del método para ver el Número de Oficinas que tiene el Edificio

    /**
     * Método para obtener los Datos del Edificio De Oficinas
     * @return Los Datos del EdificioDeOficinas
     */
    public String toString(){
        // Se transforman superficie para poder aplicarle el método toString().
        Double datoSuperficie = superficie;
        /* Se transforman numDeOficinas en Integer para poder aplicarle el método toString().
         * De otra manera no se puede hacer por ser de tipo primitivo.*/
        Integer datoNumDeOficinas = numDeOficinas;
        // Se devuelve uns String con los datos del EdificioDeOficinas
        return "EDIFICIO DE TIPO OFICINAS.\n\t- Con ".concat(datoNumDeOficinas.toString()).concat(" Oficinas")
        .concat("\n\t- Con una Superficie Total de: ").concat(datoSuperficie.toString()).concat(" m2.\n");
    }

} //Cierre de la clase

Clase Test:
Código: [Seleccionar]
import java.util.Iterator;
import java.util.ArrayList;

/**
 * EJERCICIO DE HERENCIAS Y CLASES ITERFACES.<br>
 * Esta Clase define una clase test para probar Herencias y Clases Interfaces.<br>
 * Clase 5 del Ejercicio del Tema "CU00697B para que sirven interfaces java implementar api ventaja ejemplo".
 * @author Lorenzo Fernández Asensio
 * @version 20151212.01
 */
public class Test2Interface_CU00697B {

    public static void main (String [ ] Args) {

        // Creación de una colección de Tipo Edificio que aceptara objetos polideportivo y Edificio de Oficinas
        ArrayList<Edificio_CU00697B> listaEdificios = new ArrayList<Edificio_CU00697B>();

        // Se añaden a la lista de Edificios 3 Polideportivos
        listaEdificios.add (new Polideportivo_CU00697B ("Miguel Ángel López", 34556.89));
        listaEdificios.add (new Polideportivo_CU00697B ("Ruth Beitia", 66477.12));
        listaEdificios.add (new Polideportivo_CU00697B ("Eusebio Cáceres", 46333.97));

        // Se añaden a la lista de Edificios 2 Edificios de Oficinas
        listaEdificios.add (new EdificioDeOficinas_CU00697B (85746.16, 35));
        listaEdificios.add (new EdificioDeOficinas_CU00697B (74663.67, 20));
       
        // Se crea un objeto de tipo Iterator
        Iterator<Edificio_CU00697B> it = listaEdificios.iterator();
       
        // Se limpia la pantalla de la Consola
        System.out.println("\f");
       
        // Se recorre la colección para mostrar los atributos de cada elemento
        while (it.hasNext()){
            System.out.println(it.next().toString());
        }

    } // Cierre del main
   
} // Cierre de la clase

Y la Respuesta a la Pregunta:
Citar
¿Entre qué clases existe una relación que se asemeja a la herencia múltiple?
Entre la clase Polideportivo con las clases InstalacionDeportiva y Edificio.

Espero vuestros comentarios,

Muchas Gracias,

Saludos,


25
Hola de nuevo guillerub2001,

Muchas "de nada". Me alegro que te pueda servir de ayuda.

Si. Si te fijas son tres condicionales ¿no?:
Pues comienzas con un "if" Si se cumple hace {...}
(y sin no se cumple) "else if" hace {...}
(Y si este ultimo tampoco se cumple) "else" hace {...}

Te aconsejo que lo pruebes y veras como ves el código mucho mas claro.

Saludos,

26
Hola guillerub2001,

Veo tu código bastante bien y funciona correctamente.

Te comento un par de puntos:

- En el primer bloque de comprobación  lo haces sin usar “else”. No es que este mal, porque las comprobaciones las hace, pero a la hora de ver el código el “else” ayuda más a seguir la comprobación y la hace más compacta. Sin “else” parecen 3 comprobaciones distintas.

- En el segundo bloque, según comentas, ya lo tenías. Lo único que falta es poner unos paréntesis. La comprobación del if debe ir entre paréntesis y, dentro de estos paréntesis, puedes hacer varias comprobaciones, cada una de ellas dentro de otros paréntesis.
Tu código es:
Citar
if ( diametro > 1.4 && grosor < 0.4 ) || ( diametro <= 1.4 && diametro > 0.8 && grosor < 0.25 ) {
    System.out.println ("El grosor es inferior al recomendado"); }
y este es el código que no te dará problema:
Citar
if ((diametro > 1.4 && grosor < 0.4) || (diametro <= 1.4 && diametro > 0.8 && grosor < 0.25 )) {
            System.out.println ("El grosor para esta rueda es inferior al recomendado"); }
¿Ves la diferencia?.Pruebalo y ya veras.

- En los métodos setters utilizas nombres de variables que comienzan con “get” como por ejemplo “getTipo”. Esto te puede crear confusión con los métodos getters. Te recomiendo usar otro formato de nombre, como por ejemplo “nuevoTipo” o “valorTipo”. Más adelante veras que incluso puedes usar el mismo nombre de variable que la que usas como atributo.

Espero que te sirvan mis comentarios.

Un Saludo,

27
Hola Alex,

OK. Tienes razón con lo que me comentas:
Citar
Para hacer uso del polimorfismo se recomienda declarar siempre los tipos estáticos de la superclase, clase abstracta o interface ("lo más amplio") y el tipo dinámico de la clase concreta. Por ejemplo:

Legislador_CU00695B Diputado1 = new Diputado_CU00695B ("Adrian", "De las Heras Cortes", 57, "Barcelona", "BAR-35752", 7);

Y no eres el primero en decírmelo.
Lo que ocurre es que por defecto tiendo siempre, al escribir el código, a hacerlo usando la subclase (con la idea de cambiarlo cuando tenga terminado y probado todo) y al final se me olvida cambiarlo.

Muchas gracias,

Un Saludo,

28
Hola,

Aquí contesto a las preguntas del ejercicio del Tema "CU00696B concepto interface java herencia multiple ejemplo diagrama de clase":

Citar
a) ¿Una clase puede heredar de dos clases en Java?
Si. Haciendo uso de las clase interface

Citar
b) ¿Una interface Java puede tener métodos que incluyan una sentencia while? ¿Una interface Java puede tener métodos que incluyan una sentencia System.out.println?
Una interface no puede tener métodos que tengan cuerpo porque todos los métodos de estas clases deben ser abstractos.

Citar
c) ¿Un objeto Java puede ser del tipo definido por una interface? ¿Un objeto Java puede ser al mismo tiempo del tipo definido por una interface y del tipo definido por una clase que no implementa la interface? ¿Un objeto Java puede ser al mismo tiempo del tipo definido por una interface y del tipo definido por una clase que implementa la interface?
No. No se puede crear un objeto del tipo definido por una interfaz.

Espero vuestros comentarios,

Un Saludo,

29
Hola,

Aquí dejo mi ejercicio del Tema "CU00695B clases abstractas java métodos abstract class api ejemplo ejercicio" para su corrección:

Superclase Persona:
Código: [Seleccionar]
/**
 * EJERCICIO DE HERENCIAS + CLASES Y MÉTODOS ABSTRACTOS.<br>
 * Esta Clase define una Superclase de la que "beberan" otras clases.<br>
 * Clase 1 del Ejercicio del Tema "CU00695B clases abstractas java metodos abstract class api ejemplo ejercicio".
 * @author Lorenzo Fernández Asensio
 * @version 20151209.01
 */
public class Persona_CU00695B {

    // Inicialización de Atributos
    private String nombre;
    private String apellidos;
    private int edad;

    /**
     * Constructor 1 del Producto - Atribututos sin asignación de Valores
     * @param nombre El parámetro nombre define el Nombre de la Persona
     * @param apellidos El parámetro apellidos define los Apellidos de la Persona
     * @param edad El parámetro edad define la edad de la Persona
     */
    public Persona_CU00695B() {
        nombre = "";
        apellidos = "";
        edad = 0;
    } // Cierre del constructor 1

    /**
     * Constructor 2 del Producto - Atribututos con asignación de Valores
     * @param nombre El parámetro nombre define el Nombre de la Persona
     * @param apellidos El parámetro apellidos define los Apellidos de la Persona
     * @param edad El parámetro edad define la edad de la Persona
     */
    public Persona_CU00695B (String nombre, String apellidos, int edad) {
        this.nombre = nombre;
        this.apellidos = apellidos;
        this.edad = edad;
    } // Cierre del constructor 2

    /**
     * Método para para obtener la Nombre de la Persona
     * @return El Nombre de la Persona
     */
    public String getNombre() {return nombre;}

    /**
     * Método para para obtener los Apellidos de la Persona
     * @return Los Apellidos de la Persona
     */
    public String getApellidos() {return apellidos;}

    /**
     * Método para para obtener la Edad de la Persona
     * @return La Edad de la Persona
     */
    public int getEdad() {return edad;}

    /**
     * Método para para obtener los datos de la Persona
     * @return Los datos de la Persona
     */
    public String toString() {
        /* Se transforma edad en un Integer para poder aplicarle el método toString().
         * De otra manera no se puede hacer por ser edad un tipo primitivo.*/
        Integer datoEdad = edad;
        // Se devuelve uns String con los datos de la Persona
        return "- ".concat(nombre).concat(" ").concat(apellidos)
        .concat(" de ").concat(datoEdad.toString().concat(" años,") );
    } // Cierre del método para para obtener los datos de la Persona
   
} //Cierre de la clase

Subclase Abstracta Legislador:
Código: [Seleccionar]
/**
 * EJERCICIO DE HERENCIAS + CLASES Y MÉTODOS ABSTRACTOS.<br>
 * Esta Clase define una Subclase Abstracta que "bebe" de la Superclase Persona_CU00695B.<br>
 * Clase 2 del Ejercicio del Tema "CU00695B clases abstractas java metodos abstract class api ejemplo ejercicio".
 * @author Lorenzo Fernández Asensio
 * @version 20151209.01
 */
public abstract class Legislador_CU00695B extends Persona_CU00695B {

    // Campos específicos de la subclase.
    private String provinciaQueRepresenta,
                    idLegislador;
    int antiguedad;

    /**
     * Constructor 1 del Profesor - Atribututos sin asignación de Valores
     * @param provinciaQueRepresenta El parámetro provinciaQueRepresenta define la Provincia a la que representa el Legislador
     * @param idLegislador El parámetro idLegislador define el Cod. Identificativo del Legislador
     * @param antiguedad El parámetro antiguedad define los años de antiguedad del Legislador
     */
    public Legislador_CU00695B () {
        super();
        provinciaQueRepresenta = "";
        idLegislador = "";
        antiguedad = 0;
    } // Cierre del constructor 1

    /**
     * Constructor 2 del Profesor - Atribututos con asignación de Valores
     * @param provinciaQueRepresenta El parámetro provinciaQueRepresenta define la Provincia a la que representa el Legislador
     * @param idLegislador El parámetro idLegislador define el Cod. Identificativo del Legislador
     * @param antiguedad El parámetro antiguedad define los años de antiguedad del Legislador
     */
    public Legislador_CU00695B (String nombre, String apellidos, int edad, String provinciaQueRepresenta,String idLegislador, int antiguedad) {
        super(nombre, apellidos, edad);
        this.provinciaQueRepresenta = provinciaQueRepresenta;
        this.idLegislador = idLegislador;
        this.antiguedad = antiguedad;
    } // Cierre del constructor 2

    // METODOS ESPECIFICOS DE LA SUBLASE
    /** Método para establecer la Provincia Que Representa el Legislador
     * @param provinciaQueRepresenta El parámetro provinciaQueRepresenta define el valor que contendrá la Provincia Que Representa el Legislador
     */
    public void setProvinciaQueRepresenta (String provinciaQueRepresenta) {this.provinciaQueRepresenta = provinciaQueRepresenta;}
   
    /** Método para establecer el id del Legislador
     * @param idLegislador El parámetro idLegislador define el valor que contendrá el Cod. Identificativo del Legislador
     */
    public void setIdLegislador (String idLegislador) {this.idLegislador = idLegislador;}
   
    /** Método para establecer la Antiguedad del Legislador
     * @param antiguedad El parámetro antiguedad define el valor que contendrá la Antiguedad del Legislador
     */
    public void setAntiguedad (int antiguedad) {this.antiguedad = antiguedad;}
   
    /** Método para obtener la Provincia Que Representa el Legislador
     * @return La provincia a la que representa el Legislador
     */
    public String getProvinciaQueRepresenta() {return provinciaQueRepresenta;}
   
    /** Método para obtener el id del Legislador
     * @return El Código Identificativo del Legislador
     */
    public String getIdLegislador() {return idLegislador;}
   
    /** Método para obtener la Antiguedad del Legislador
     * @return La antiguedad del Legislador
     */
    public int getAntiguedad() {return antiguedad;}
   
    /**
     * Método Abstracto para la camara en la que trabaja el Legislador
     */
    // Método abstracto (definido como abstract y sin cuerpo)
    abstract public String getCamaraEnQueTrabaja();
   
    /**
     * Método para para obtener los datos del Legislador
     * @return Los datos del Legislador
     */
    public String toString () {
        /* Se transforma antiguedad en un Integer para poder aplicarle el método toString().
         * De otra manera no se puede hacer por ser antiguedad un tipo primitivo.*/
        Integer datoAntiguedad = antiguedad;
        // Se devuelve uns String con los datos de Persona + los de Legislador
        return super.toString().concat(" con Cod. identificativo ").concat(idLegislador)
        .concat(" y con ").concat(datoAntiguedad.toString().concat(" años representando a la Provincia de ").concat(provinciaQueRepresenta));
    }// Cierre del método para obtener los datos del Profesor

} //Cierre de la clase

Subclase Diputado:
Código: [Seleccionar]
/**
 * EJERCICIO DE HERENCIAS + CLASES Y MÉTODOS ABSTRACTOS.<br>
 * Esta Clase define una Subclase que "bebe" de la Superclase Legislador_CU00695B.<br>
 * Clase 3 del Ejercicio del Tema "CU00695B clases abstractas java metodos abstract class api ejemplo ejercicio".
 * @author Lorenzo Fernández Asensio
 * @version 20151209.01
 */
public class Diputado_CU00695B extends Legislador_CU00695B {
   
    // No hay campos específicos de la subclase.
   
    /**
     * Constructor 1 del Diputado - Atribututos sin asignación de Valores
     */
    public Diputado_CU00695B () {
        super();
    } // Cierre del constructor 1

    /**
     * Constructor 2 del Diputado - Atribututos con asignación de Valores
     */
    public Diputado_CU00695B (String nombre, String apellidos, int edad, String provinciaQueRepresenta,String idLegislador, int antiguedad) {
        super(nombre, apellidos, edad, provinciaQueRepresenta, idLegislador, antiguedad);
    } // Cierre del constructor 2
   
    /**
     * Método Abstracto que redefine (obligatoriamente han de hacerlo) el método abstracto getCamaraEnQueTrabaja() de la superclase.
     * @return En que Cámara trabaja el Diputado
     */
    public String getCamaraEnQueTrabaja() { return " en la Cámara del Congreso.";} //Método abstracto sobreescrito en esta clase
   
    /**
     * Método para para obtener los datos del Diputado
     * @return Los datos del Diputado
     */
    public String toString () { // Sobreescritura del método
        return super.toString().concat (getCamaraEnQueTrabaja());}

} //Cierre de la clase

Subclase Senador:
Código: [Seleccionar]
/**
 * EJERCICIO DE HERENCIAS + CLASES Y MÉTODOS ABSTRACTOS.<br>
 * Esta Clase define una Subclase que "bebe" de la Superclase Legislador_CU00695B.<br>
 * Clase 4 del Ejercicio del Tema "CU00695B clases abstractas java metodos abstract class api ejemplo ejercicio".
 * @author Lorenzo Fernández Asensio
 * @version 20151209.01
 */
public class Senador_CU00695B extends Legislador_CU00695B {
   
    // No hay campos específicos de la subclase.
   
    /**
     * Constructor 1 del Senador - Atribututos sin asignación de Valores
     */
    public Senador_CU00695B () {
        super();
    } // Cierre del constructor 1

    /**
     * Constructor 2 del Senador - Atribututos con asignación de Valores
     */
    public Senador_CU00695B (String nombre, String apellidos, int edad, String provinciaQueRepresenta,String idLegislador, int antiguedad) {
        super(nombre, apellidos, edad, provinciaQueRepresenta, idLegislador, antiguedad);
    } // Cierre del constructor 2
   
    /**
     * Método Abstracto que redefine (obligatoriamente han de hacerlo) el método abstracto getCamaraEnQueTrabaja() de la superclase.
     * @return En que Cámara trabaja el Senador
     */
    public String getCamaraEnQueTrabaja() { return " en la Cámara del Senado.";} //Método abstracto sobreescrito
   
    /**
     * Método para para obtener los datos del Senador
     * @return Los datos del Senador
     */
    public String toString () { // Sobreescritura del método
        return super.toString().concat (getCamaraEnQueTrabaja());}

} //Cierre de la clase

Clase Lista Legisladores:
Código: [Seleccionar]
import java.util.ArrayList;
import java.util.Iterator;

/**
 * EJERCICIO DE HERENCIAS + CLASES Y MÉTODOS ABSTRACTOS.<br>
 * Esta Clase define una Subclase que "bebe" de las Superclases intermedias de tipos de Legisladores.<br>
 * Clase 5 del Ejercicio del Tema "CU00695B clases abstractas java metodos abstract class api ejemplo ejercicio".
 * @author Lorenzo Fernández Asensio
 * @version 20151209.01
 */
public class ListaLegisladores_CU00695B {
   
    // Inicialización de la Colección
    private ArrayList <Legislador_CU00695B> listaLegisladores; //Campo de la clase
   
    /**
     * Constructor de la Colección Lista de Legisladores.
     * @param listaLegisladores El parámetro listaLegisladores define la colección de la Lista de Legisladores
     */
    public ListaLegisladores_CU00695B () {
        // Creación de la Colección
        listaLegisladores = new ArrayList <Legislador_CU00695B> ();
    } // Cierre del Constructor
   
    /**
     * Método para añadir un legislador a la Colección
     * @param legisladorNuevo El parámetro legisladorNuevo define el Legislador que se añade a la Colección
     */
    public void addLegislador (Legislador_CU00695B legisladorNuevo) {
        listaLegisladores.add(legisladorNuevo);
    } // Cierre del método para añadir un legislador a la Colección
   
    /**
     * Método para mostrar por pantalla la Información usando un For Extendido
     */
    public void imprimirListado() {
       
        // Se limpia la pantalla de la Consola
        System.out.println("\f");
       
        // Se Muestra en pantalla un mensaje de Inicio
        System.out.println ("En la actualidad, tenemos los siguientes Legisladores:");
       
        // Se recorre la lista mostrando los datos
        for (Legislador_CU00695B tmp: listaLegisladores) {
            // Se realiza una llamada al método "toString" del objeto en curso
            System.out.println (tmp.toString());
        }
       
    } //Cierre método imprimirListin
   
} //Cierre de la clase

Clase Test:
Código: [Seleccionar]
/**
 * EJERCICIO DE HERENCIAS + CLASES Y MÉTODOS ABSTRACTOS.<br>
 * Esta Clase define una clase test para probar Herencias y Clase & Métodos Abstractos.<br>
 * Clase 6 del Ejercicio del Tema "CU00695B clases abstractas java metodos abstract class api ejemplo ejercicio".
 * @author Lorenzo Fernández Asensio
 * @version 20151209.01
 */
public class TestAbstractLegis_CU00695B {

    public static void main (String [ ] Args) {
       
       
        // Creación de varios Diputados
        Diputado_CU00695B Diputado1 = new Diputado_CU00695B ("Adrian", "De las Heras Cortes", 57, "Barcelona", "BAR-35752", 7);
        Diputado_CU00695B Diputado2 = new Diputado_CU00695B ("Celia", "Jimenez Ladrillo", 63, "Sevilla", "SEV-7841", 14);
        Diputado_CU00695B Diputado3 = new Diputado_CU00695B ("Felix", "Garcia Trujillo", 58, "Badajoz", "BAD-459", 3);
       
        // Creación de varios Senadores
        Senador_CU00695B senador1 = new Senador_CU00695B ("Maria de la O", "Abellan Ruiz", 46, "Salamanca", "BSAL-4978", 1);
        Senador_CU00695B senador2 = new Senador_CU00695B ("Ramón", "Guitarra Espada", 69, "Murcia", "MUR-1599", 8);
        Senador_CU00695B senador3 = new Senador_CU00695B ("Margarita", "Sanchez Raspa", 51, "Huelva", "HUE-1994", 5);
       
        // Creación de un objeto Lista de Legisladores
        ListaLegisladores_CU00695B listaLegisladores = new ListaLegisladores_CU00695B ();
       
        // Se Añaden a la lista los Diputados
        listaLegisladores.addLegislador(Diputado1);
        listaLegisladores.addLegislador(Diputado2);
        listaLegisladores.addLegislador(Diputado3);
       
        // Se Añaden al listin los Senadores
        listaLegisladores.addLegislador(senador1);
        listaLegisladores.addLegislador(senador2);
        listaLegisladores.addLegislador(senador3);
       
        // Se realiza llamada al método "imprimirListado" de la clase "listaLegisladores" para imprimirlo
        listaLegisladores.imprimirListado();
           
    } // Cierre del main

} // Cierre de la clase

Como siempre, espero vuestros comentarios.

Muchas Gracias,

Un Saludo,

30
Hola Cintia,

En principio este ejercicio no esta enfocado para pedir datos por teclado, pero si se quisieran pedir, se debería crear otra clase Para introducir datos.
Yo, según lo tengo hecho, introduzco los datos directamente en la clase Test.

Un Saludo,

31
Hola Mario,

Ok. Tienes razón. Voy a realizar los cambios que me comentas.

Muchas gracias

Un Saludo,

32
OK Mario,

Muchas gracias,

Un Saludo,

33
Buenas tardes,

Aquí dejo mi ejercicio del tema "CU00694B sobreescribir metodo toString equals java comparar objetos ejemplos" para su corrección:

Superclase Figura:

Código: [Seleccionar]
/**
 * EJERCICIO DE HERENCIAS, MÉTODOS POLIMÓRFICOS Y USO DEL MÉTODO EQUALS.<br>
 * Esta Clase define una Superclase de la que "beberan" otras clases.<br>
 * Clase 1 del Ejercicio del Tema "CU00694B sobreescribir metodo toString equals java comparar objetos ejemplos".
 * @author aprenderaprogramar.com
 * @version 20151204.01
 */
public class Figura_CU00694B {

    // Inicialización de Atributos
    protected int dimensionPrincipal;

    /**
     * Constructor 1 del Producto. Atribututos sin asignación de Valores
     * @param dimensionPrincipal El parámetro dimensionPrincipal define la Medida Principal de la Figura
     */
    public Figura_CU00694B() {
        dimensionPrincipal = 0;
    } // Cierre del Constructor 1

    /**
     * Constructor 2 del Producto. Atribututos con asignación de Valores
     * @param dimensionPrincipal El parámetro dimensionPrincipal define la Medida Principal de la Figura
     */
    public Figura_CU00694B(int dimensionPrincipal) {
        this.dimensionPrincipal = dimensionPrincipal;
    } // Cierre del Constructor 2

    /**
     * Método para establecer la Medida Principal de la Figura
     * @param valorDimensionPrincipal El parámetro valorDimensionPrincipal define el valor que contendrá la Medida Principal de la Figura
     */
    public void setDimensionPrincipal(int valorDimensionPrincipal) {
        dimensionPrincipal = valorDimensionPrincipal;
    } // Cierre del método para establecer la Medida Principal de la Figura

    /**
     * Método para para obtener la Medida Principal de la Figura
     * @return la Medida Principal de la Figura
     */
    public int getDimensionPrincipal(){ return dimensionPrincipal; }

    /**
     * Método de Sobreescritura del método equals
     * @return Comparación de si dos Figuras tienen igual la Medida Principal
     */
    public boolean equals (Object obj) {

        /* En primer lugar se comprueba si el objeto pasado como parámetro (obj) es un tipo Figura.
         * Si no lo es, se devuelve como resultado del método false:
         * los objetos no son iguales (no pueden serlo si ni siquiera coinciden sus tipos).*/
        if (obj instanceof Figura_CU00694B) {

            /* En segundo lugar, se crea una variable de tipo Figura a la que se asigna
             * el objeto pasado como parámetro valiéndonos de casting (enmascaramiento).
             * Esta variable se crea para poder invocar campos y métodos de la clase Figura,
             * ya que esto no se podria hacer sobre un objeto de tipo Object.
             * Con esta variable, se realizan las comparaciones oportunas y se devuelve un resultado.*/
            Figura_CU00694B tmpFigura = (Figura_CU00694B) obj;

            /* Comparación para ver si coinciden su dimensionPrincipal.
             * La dimensionPrincipal se compara con el operador == por ser un tipo primitivo*/
            if (this.dimensionPrincipal == tmpFigura.dimensionPrincipal) {
                return true;
            } else {
                return false; }

        } else {
            return false;
        }

    } //Cierre del método equals

    /**
     * Método para mostar la Información de la Figura
     */
    public void mostrarDatos() {
        System.out.println ("\tMedida Principal de la Figura: " + dimensionPrincipal);
    } // Cierre del método para mostrar información de la Figura

} // Cierre de la Clase


Subclase Cuadrado:

Código: [Seleccionar]
/**
 * EJERCICIO DE HERENCIAS, MÉTODOS POLIMÓRFICOS Y USO DEL MÉTODO EQUALS.<br>
 * Esta Clase define una Subclase que "bebe" de la Superclase Figura_CU00694B.<br>
 * Clase 2 del Ejercicio del Tema "CU00694B sobreescribir metodo toString equals java comparar objetos ejemplos".
 * @author aprenderaprogramar.com
 * @version 20151204.01
 */
public class Cuadrado_CU00694B extends Figura_CU00694B {

    // No hay campos específicos de la subclase.

    /**
     * Constructor 1 del Producto. Atribututos sin asignación de Valores
     */
    public Cuadrado_CU00694B () {
        super();
    } // Cierre del constructor 1

    /**
     * Constructor 2 del Producto. Atribututos con asignación de Valores
     */
    public Cuadrado_CU00694B (int dimensionPrincipal) {       
        super(dimensionPrincipal); // Parametros del constructor de la Superclase. Siempre se incluyen
        // No hay campos específicos de la subclase.
    } // Cierre del constructor 2

    // METODOS ESPECIFICOS DE LA SUBLASE
    /**
     * Método de Sobreescritura del método equals
     * @return Comparación de si dos cuadrados son iguales si coinciden su Medida Principal.
     */
    public boolean equals (Object obj) {
       
        /* En primer lugar se comprueba si el objeto pasado como parámetro (obj) es un tipo Cuadrado.
         * Si no lo es, se devuelve como resultado del método false:
         * los objetos no son iguales (no pueden serlo si ni siquiera coinciden sus tipos).*/
        if (obj instanceof Cuadrado_CU00694B) {
           
            /* En segundo lugar, se crea una variable de tipo Cuadrado a la que se asigna
             * el objeto pasado como parámetro valiéndonos de casting (enmascaramiento).
             * Esta variable se crea para poder invocar campos y métodos de la clase Cuadrado,
             * ya que esto no se podria hacer sobre un objeto de tipo Object.
             * Con esta variable, se realizan las comparaciones oportunas y se devuelve un resultado.*/
             Cuadrado_CU00694B tmpCuadrado = (Cuadrado_CU00694B) obj;
           
            /* En este caso se invoca el método equals de la superclase Figura,
             * para que dos cuadrados sean iguales han de coincidir la dimensionPrincipal.*/
            if (super.equals(tmpCuadrado)) {
                return true;
            } else {
                return false;
            }
           
        } else {
            return false;
        }
       
    } // Cierre del método equals
   
    /**
     * Método para clacular el área del cuadrado
     * @return El área del cuadrado.
     */
    public double getAreaCuadrado() {
        return dimensionPrincipal * dimensionPrincipal;
    } // Cierre del método para clacular el área del círculo
   
    /**
     * Método para mostar la Información del Cuadrado
     */
    public void mostrarDatos() {
        super.mostrarDatos();
         System.out.println ("\tPor lo tanto, el Área del Cuadrado es: " + dimensionPrincipal + "*" + dimensionPrincipal + " = " + getAreaCuadrado());
    } // Cierre del método para mostar la Información del Cuadrado

} // Cierre de la Clase


Subclase Círculo:

Código: [Seleccionar]
/**
 * EJERCICIO DE HERENCIAS, MÉTODOS POLIMÓRFICOS Y USO DEL MÉTODO EQUALS.<br>
 * Esta Clase define una Subclase que "bebe" de la Superclase Figura_CU00694B.<br>
 * Clase 3 del Ejercicio del Tema "CU00694B sobreescribir metodo toString equals java comparar objetos ejemplos".
 * @author aprenderaprogramar.com
 * @version 20151204.01
 */
public class Circulo_CU00694B extends Figura_CU00694B {

    // No hay campos específicos de la subclase.

    /**
     * Constructor 1 del Producto. Atribututos sin asignación de Valores
     */
    public Circulo_CU00694B () {
        super();
    } // Cierre del constructor 1

    /**
     * Constructor 2 del Producto. Atribututos con asignación de Valores
     */
    public Circulo_CU00694B (int dimensionPrincipal) {       
        super(dimensionPrincipal); // Parametros del constructor de la Superclase. Siempre se incluyen
        // No hay campos específicos de la subclase.
    } // Cierre del constructor 2

    // METODOS ESPECIFICOS DE LA SUBLASE
    /**
     * Método de Sobreescritura del método equals
     * @return Comparación de si dos círculos son iguales si coinciden su Medida Principal.
     */
    public boolean equals (Object obj) {
       
        /* En primer lugar se comprueba si el objeto pasado como parámetro (obj) es un tipo Círculo.
         * Si no lo es, se devuelve como resultado del método false:
         * los objetos no son iguales (no pueden serlo si ni siquiera coinciden sus tipos).*/
        if (obj instanceof Circulo_CU00694B) {
           
            /* En segundo lugar, se crea una variable de tipo Círculo a la que se asigna
             * el objeto pasado como parámetro valiéndonos de casting (enmascaramiento).
             * Esta variable se crea para poder invocar campos y métodos de la clase Círculo,
             * ya que esto no se podria hacer sobre un objeto de tipo Object.
             * Con esta variable, se realizan las comparaciones oportunas y se devuelve un resultado.*/
             Circulo_CU00694B tmpCirculo = (Circulo_CU00694B) obj;
           
            /* En este caso se invoca el método equals de la superclase Figura,
             * con lo que se dice que para que dos círculos sean iguales
             * han de coincidir la dimensionPrincipal.*/
            if (super.equals(tmpCirculo)) {
                return true;
            } else {
                return false;
            }
           
        } else {
            return false;
        }
       
    } // Cierre del método equals
   
    /**
     * Método para clacular el área del círculo
     * @return El área del círculo.
     */
    public double getAreaCirculo() {
        return 3.1416 * (dimensionPrincipal*dimensionPrincipal);
    } // Cierre del método para clacular el área del círculo
   
    /**
     * Método para mostar la Información del Circulo
     */
    public void mostrarDatos() {
        super.mostrarDatos();
         System.out.println ("\tPor lo tanto, el Área del Circulo es: 3.1416*(" + dimensionPrincipal + "*" + dimensionPrincipal + ") = " + getAreaCirculo());
    } // Cierre del método para mostar la Información del Circulo

} // Cierre de la Clase


Clase Test:

Código: [Seleccionar]
/**
 * EJERCICIO DE HERENCIAS, MÉTODOS POLIMÓRFICOS Y USO DEL MÉTODO EQUALS.<br>
 * Esta Clase define una clase test para probar Herencias y método Equals.<br>
 * Clase 4 del Ejercicio del Tema "CU00694B sobreescribir metodo toString equals java comparar objetos ejemplos".
 * @author aprenderaprogramar.com
 * @version 20151204.01
 */
public class TestEquals_CU00694B{
   
    public static void main (String [ ] Args) {
       
        /* Creación de 3 objetos Cuadrado
         * Se le pasa 1 parámetros gestionado por el constructor de la superclase Figura*/
        Cuadrado_CU00694B cuadrado1 = new Cuadrado_CU00694B (55);
        Cuadrado_CU00694B cuadrado2 = new Cuadrado_CU00694B (25);
        Cuadrado_CU00694B cuadrado3 = new Cuadrado_CU00694B (55);
       
        /* Creación de 3 objetos Circulo
         * Se le pasa 1 parámetros gestionado por el constructor de la superclase Figura*/
        Circulo_CU00694B circulo1 = new Circulo_CU00694B (48);
        Circulo_CU00694B circulo2 = new Circulo_CU00694B (48);
        Circulo_CU00694B circulo3 = new Circulo_CU00694B (25);
       
        // Se limpia la pantalla de la Consola
        System.out.println("\f");
       
        // Se muestran en pantalla las compraciones de los distintos objetos
        System.out.println ("COMPARATIVA DE LOS CUADRADOS");
        System.out.println ("----------------------------");
        System.out.println ("- El Cuadrado1:");
        cuadrado1.mostrarDatos();
        System.out.println ("- El Cuadrado2:");
        cuadrado2.mostrarDatos();
        System.out.println ("- El Cuadrado3:");
        cuadrado3.mostrarDatos();
        System.out.println ("- Comparaciones:");
        System.out.println ("\t¿Son iguales el cuadrado1 y el cuadrado2? " + cuadrado1.equals(cuadrado2) );
        System.out.println ("\t¿Son iguales el cuadrado1 y el cuadrado3? " + cuadrado1.equals(cuadrado3) );
        System.out.println ("\t¿Son iguales el cuadrado2 y el cuadrado3? " + cuadrado2.equals(cuadrado3) );
        System.out.println(""); // Se imprime una línea en Blanco de separación
        System.out.println ("COMPARATIVA DE LOS CÍCULOS");
        System.out.println ("--------------------------");
        System.out.println ("- El Círculo1:");
        circulo1.mostrarDatos();
        System.out.println ("- El Círculo2:");
        circulo2.mostrarDatos();
        System.out.println ("- El Círculo3:");
        circulo3.mostrarDatos();
        System.out.println ("- Comparaciones:");
        System.out.println ("\t¿Son iguales la circulo1 y la circulo2? " + circulo1.equals(circulo2) );
        System.out.println ("\t¿Son iguales la circulo1 y la circulo3? " + circulo1.equals(circulo3) );
        System.out.println ("\t¿Son iguales la circulo2 y la circulo3? " + circulo2.equals(circulo3) );
        System.out.println(""); // Se imprime una línea en Blanco de separación
        System.out.println ("Se realiza una ultima comprobación entre uno de los cuadrados y un círculo con la misma Medida Proncipal");
        System.out.println ("\t¿Son iguales la cuadrado2 y la circulo3? " + cuadrado2.equals(circulo3) );
       
    } //Cierre del main
   
} //Cierre de la clase

Espero vuestros comentarios,

Muchas gracias,

Saludos,

34
Hola Ogramar,

Muchas gracias,

Un Saludo,

35
Hola Mario,

Muchas Gracias.

A lo que me refiero con el desglose es que, ya que hacia modificaciones, pretendía que en el caso del Profesor Emérito me hiciera un desglose poniendo primero el Sueldo Base como profesor normal y después, en la ultima línea, el Sueldo Base total (como Emérito) pero, como veras en el ejemplo que puse, al hacer la llamada al método de la subclase me pone en las dos líneas el sueldo Base total.
Y pensé que al usar "this" en el método de la superclase funcionaria, pero no es así. ¿Hay alguna forma de conseguirlo?

De nuevo, muchas gracias,

Un Saludo,

36
Hola Mario,

He realizado los cambios que me propones:

Superclase Profesor:
Código: [Seleccionar]
/**
 * EJEMPLO DE HERENCIAS, MÉTODOS POLIMÓRFICOS Y USO DE SUPER PARA LLAMAR A MÉTODOS DE SUPERCLASE.<br>
 * Esta Clase define una Superclase de la que "beberan" otras clases.<br>
 * Clase 1 del Ejercicio del Tema "CU00692B super invocar metodos superclases subclases java ejemplo basico".
 * @author Lorenzo Fernández Asensio
 * @version 20151201.02
 */
public class Profesor_CU00692B {

    // Inicialización de Atributos
    private String nombre;
    private int edad,
                agnosConsolidados;

    /**
     * Constructor 1 del Producto. Atribututos sin asignación de Valores
     * @param nombre El parámetro nombre define el Nombre del Profesor
     * @param edad El parámetro edad define la edad del Profesor
     * @param agnosConsolidados El parámetro agnosConsolidados define los años consolidados que lleva el Profesor
     */
    public Profesor_CU00692B () {
        nombre = "";
        edad = 0;
        agnosConsolidados = 0;
    } // Cierre del constructor 1

    /**
     * Constructor 2 del Producto. Atribututos con asignación de Valores
     * @param nombre El parámetro nombre define el Nombre del Profesor
     * @param edad El parámetro edad define la edad del Profesor
     * @param agnosConsolidados El parámetro agnosConsolidados define los años consolidados que lleva el Profesor
     */
    public Profesor_CU00692B (String nombre, int edad, int agnosConsolidados) {       
        this.nombre = nombre;
        this.edad = edad;
        this.agnosConsolidados = agnosConsolidados;
    } // Cierre del constructor 2

    /**
     * Método para establecer el Nombre del Profesor
     * @param valorNombre El parámetro valorNombre define el valor que contendrá el Nombre
     */
    public void setNombre(String valorNombre) {
        nombre = valorNombre;
    } // Cierre del método para establecer el Nombre del Profesor
   
    /**
     * Método para establecer la Edad del Profesor
     * @param valorEdad El parámetro valorEdad define el valor que contendrá la Edad
     */
    public void setEdad(int valorEdad) {
        edad = valorEdad;
    } // Cierre del método para establecer la Edad del Profesor
   
    /**
     * Método para establecer los Años Consolidados del Profesor
     * @param valorAgnosConsolidados El parámetro valorAgnosConsolidados define el valor que contendrá los Años Consolidados
     */
    public void setAgnosConsolidados(int valorAgnosConsolidados) {
        agnosConsolidados = valorAgnosConsolidados;
    } // Cierre del método para establecer la Edad del Profesor
   
    /**
     * Método para para obtener la Nombre del Profesor
     * @return El Nombre del Profesor
     */
    public String getNombre(){ return nombre; }
   
     /**
     * Método para para obtener la Edad del Profesor
     * @return La Edad del Profesor
     */
    public int getEdad(){ return edad; }
   
     /**
     * Método para para obtener los Años Consolidados del Profesor
     * @return Los Años Consolidados del Profesor
     */
    public int getAgnosConsolidados(){ return agnosConsolidados; }
   
    /**
     * Método para para obtener el Salario Base del Profesor
     * @return El Salario Base del Profesor
     */
    public double obtenerSalarioBase() {
        return  725 + (agnosConsolidados * 33.25);
    } // Cierre del método para obtener el Salario Base del Profesor
   
    /**
     * Método para mostar la Información del Profesor
     */
    public void mostrarDatos() {
        System.out.println ("Nombre: " + nombre);
        System.out.println ("De: " + edad + " años");
        System.out.println ("Con: " + agnosConsolidados + " años como Profesor Consolidado");
        System.out.println ("Y con un Sueldo Base de: " + this.obtenerSalarioBase());
    } // Cierre del método para mostrar información del Profesor
   
} // Cierre de la Clase

Subclase Profesor Emerito:
Código: [Seleccionar]
/**EJEMPLO DE HERENCIAS, MÉTODOS POLIMÓRFICOS Y USO DE SUPER PARA LLAMAR A MÉTODOS DE SUPERCLASE.<br>
 * Esta Clase define una Subclase que "bebe" de la Superclase Profesor_CU00692B.<br>
 * Clase 2 del Ejercicio del Tema "CU00692B super invocar metodos superclases subclases java ejemplo basico".
 * @author Lorenzo Fernández Asensio
 * @version 20151201.02
 */
public class ProfesorEmerito_CU00692B extends Profesor_CU00692B {
   
    //Campo específico de la subclase.
    private int agnosEmerito;
   
     /**
     * Constructor 1 del Profesor. Atribututos sin asignación de Valores
     * @param agnosEmerito El parámetro agnosEmerito define los años que lleva como Emerito el Profesor
     */
    public ProfesorEmerito_CU00692B() {
        super();
        agnosEmerito = 0;
    } // Cierre del constructor 1
   
     /** Constructor 2 del Profesor. Atribututos con asignación de Valores
      * @param agnosEmerito El parámetro agnosEmerito define los años que lleva como Emerito el Profesor
     */
    public ProfesorEmerito_CU00692B(String nombre, int edad, int agnosConsolidados, int agnosEmerito) {
        super(nombre, edad, agnosConsolidados);
        this.agnosEmerito = agnosEmerito;
    } // Cierre del constructor 2
   
    /**
     * Método para establecer los Años que lleva el Profesor como Emerito
     * @param valorAgnosEmerito El parámetro valorAgnosEmerito define el valor de los Años como Emerito
     */
    public void setAgnosEmerito(int valorAgnosEmerito) {
        agnosEmerito = valorAgnosEmerito;
    } // Cierre del método para establecer los Años que lleva el Profesor como Emerito
   
    /**
     * Método para para obtener los Años que lleva el Profesor como Emerito
     * @return Los Años que lleva el Profesor como Emerito
     */
    public int getAgnosEmerito() { return agnosEmerito;}
   
    /**
     * Método para para obtener el Salario Base del Profesor Emerito
     * @return El Salario Base del Profesor Emerito
     */
    public double obtenerSalarioBase() {
        return super.obtenerSalarioBase() + (47.80 * agnosEmerito);
    } // Cierre del método para obtener el Salario Base del Profesor
   
    /**
     * Método para mostar la Información del Profesor Emerito
     */
    public void mostrarDatos() {
        super.mostrarDatos();
        System.out.println ("Más " + agnosEmerito + " años como Profesor Emerito");
        System.out.println ("Hace un Sueldo Base Total de: " + obtenerSalarioBase());
    } // Cierre del método para mostar la Información del Profesor
   
} //Cierre de la clase

Clase Test:
Código: [Seleccionar]
/**
 * EJEMPLO DE HERENCIAS, MÉTODOS POLIMÓRFICOS Y USO DE SUPER PARA LLAMAR A MÉTODOS DE SUPERCLASE.<br>
 * Esta Clase define una clase test para probar Herencias, Polimorfismos y uso de super para métodos.<br>
 * Clase 3 del Ejercicio del Tema "CU00692B super invocar metodos superclases subclases java ejemplo basico".
 * @author Lorenzo Fernández Asensio
 * @version 20151201.02
 */
public class TestHerencia_CU00692B {

    public static void main (String [ ] Args) {
       
        // Se crea un objeto Profesor
        // y se le pasan 3 parámetros que son gestionados por el constructor de la superclase Profesor
        Profesor_CU00692B profesor1 = new Profesor_CU00692B ("Daniel", 51, 30);
       
        // Se crea un objeto Profesor Emerito
        // y se le pasan 4 parámetros. 3 son gestionados por el constructor de la superclase Profesor
        // y 1 parámetro gestionado por el cosntructor de la subclase Profesor Emerito
        Profesor_CU00692B emerito1 = new ProfesorEmerito_CU00692B("Marcos", 65, 42, 10);
       
        // Se limpia la pantalla de la Consola
        System.out.println("\f");
       
        // Mostrar Datos
        emerito1.mostrarDatos();
        System.out.println(""); // Se imprime una línea de separación en blanco
        profesor1.mostrarDatos();
    } //Cierre del main
   
} //Cierre de la clase

A tu pregunta:
Citar
¿Qué método usará el compilador java cuando tenga que resolver si usar el método de la superclase o de la subclase, cuando sea invocado desde un objeto instanciado con tipo dinámico el de la subclase?
Por lo que he visto, creo que el método que usa el compilador es el de la Subclase porque el importe que me da es directamente el total con los años de Emérito y todo. De hecho, no se como poner el código para que me haga el desglose que yo quería hacer (pesaba que al usar "this" en el método de la superclase lo haría, pero no es así).

Te pongo un ejemplo de como me sale:
Código: [Seleccionar]
Nombre: Marcos
De: 65 años
Con: 42 años como Profesor Consolidado
Y con un Sueldo Base de: 2599.5
Más 10 años como Profesor Emerito
Hace un Sueldo Base Total de: 2599.5

Nombre: Daniel
De: 51 años
Con: 30 años como Profesor Consolidado
Y con un Sueldo Base de: 1722.5

Espero tus comentarios,

Muchas gracias,

Un Saludo,

37
Hola,

Aquí dejo mi ejercicio del tema "CU00693B tipos modificador acceso java public private protected visibilidad" para su corrección:

Citar
Considera que estás desarrollando un programa Java donde trabajas con la superclase Profesor y la subclase ProfesorEmerito. Crea el código para estas clases que cumpla los requisitos que indicamos.
Como atributos de la superclase tendremos nombre (String), edad (int) y  añosConsolidados (int) declarados como protected.
Código: [Seleccionar]
/**
 * EJEMPLO DE HERENCIAS, MÉTODOS POLIMÓRFICOS Y ACCESO.<br>
 * Esta Clase define una Superclase de la que "beberan" otras clases.<br>
 * Clase 1 del Ejercicio del Tema "CU00693B tipos modificador acceso java public private protected visibilidad".
 * @author Lorenzo Fernández Asensio
 * @version 20151202.01
 */
public class Profesor_CU00693B {

    // Inicialización de Atributos
    protected String nombre;
    protected int edad,
                agnosConsolidados;
    /* La sigiente inicialización daría error al compilar la subclase "Profesor Emerito"
     * si se intenta usar este atributo sin utilizar una invocación a super ni un método get*/
    // private agnosConsolidados;

    /**
     * Constructor 1 del Producto. Atribututos sin asignación de Valores
     * @param nombre El parámetro nombre define el Nombre del Profesor
     * @param edad El parámetro edad define la edad del Profesor
     * @param agnosConsolidados El parámetro agnosConsolidados define los años consolidados que lleva el Profesor
     */
    public Profesor_CU00693B () {
        nombre = "";
        edad = 0;
        agnosConsolidados = 0;
    } // Cierre del constructor 1

    /**
     * Constructor 2 del Producto. Atribututos con asignación de Valores
     * @param nombre El parámetro nombre define el Nombre del Profesor
     * @param edad El parámetro edad define la edad del Profesor
     * @param agnosConsolidados El parámetro agnosConsolidados define los años consolidados que lleva el Profesor
     */
    public Profesor_CU00693B (String nombre, int edad, int agnosConsolidados) {       
        this.nombre = nombre;
        this.edad = edad;
        this.agnosConsolidados = agnosConsolidados;
    } // Cierre del constructor 2

    /**
     * Método para establecer el Nombre del Profesor
     * @param valorNombre El parámetro valorNombre define el valor que contendrá el Nombre
     */
    public void setNombre(String valorNombre) {
        nombre = valorNombre;
    } // Cierre del método para establecer el Nombre del Profesor
   
    /**
     * Método para establecer la Edad del Profesor
     * @param valorEdad El parámetro valorEdad define el valor que contendrá la Edad
     */
    public void setEdad(int valorEdad) {
        edad = valorEdad;
    } // Cierre del método para establecer la Edad del Profesor
   
    /**
     * Método para establecer los Años Consolidados del Profesor
     * @param valorAgnosConsolidados El parámetro valorAgnosConsolidados define el valor que contendrá los Años Consolidados
     */
    public void setAgnosConsolidados(int valorAgnosConsolidados) {
        agnosConsolidados = valorAgnosConsolidados;
    } // Cierre del método para establecer la Edad del Profesor
   
    /**
     * Método para para obtener la Nombre del Profesor
     * @return El Nombre del Profesor
     */
    public String getNombre(){ return nombre; }
   
     /**
     * Método para para obtener la Edad del Profesor
     * @return La Edad del Profesor
     */
    public int getEdad(){ return edad; }
   
     /**
     * Método para para obtener los Años Consolidados del Profesor
     * @return Los Años Consolidados del Profesor
     */
    public int getAgnosConsolidados(){ return agnosConsolidados; }
   
    /**
     * Método para para obtener el Salario Base del Profesor
     * @return El Salario Base del Profesor
     */
    public double obtenerSalarioBase() {
        return  725 + (agnosConsolidados * 33.25);
    } // Cierre del método para obtener el Salario Base del Profesor
   
    /**
     * Método para mostar la Información del Profesor
     */
    public void mostrarDatos() {
        System.out.println ("Nombre: " + nombre);
        System.out.println ("De: " + edad + " años");
        System.out.println ("Con: " + agnosConsolidados + " años como Profesor Consolidado");
    } // Cierre del método para mostrar información del Profesor
   
} // Cierre de la Clase

Citar
En la subclase se trabajará con el campo adicional añosEmerito declarado como private.
Un método de la subclase será double obtenerSalarioBase () que obtendrá el salario base como (925 + añosConsolidados * 33.25 + 47.80 * añosEmerito).
Intenta acceder directamente al campo añosConsolidados desde la subclase (como si fuera un campo más de la subclase) para implementar este método.
Código: [Seleccionar]
/**EJEMPLO DE HERENCIAS, MÉTODOS POLIMÓRFICOS Y ACCESO.<br>
 * Esta Clase define una Subclase que "bebe" de la Superclase Profesor_CU00693B.<br>
 * Clase 2 del Ejercicio del Tema "CU00693B tipos modificador acceso java public private protected visibilidad".
 * @author Lorenzo Fernández Asensio
 * @version 20151202.01
 */
public class ProfesorEmerito_CU00693B extends Profesor_CU00693B {
   
    //Campo específico de la subclase.
    private int agnosEmerito;
   
     /**
     * Constructor 1 del Profesor. Atribututos sin asignación de Valores
     * @param agnosEmerito El parámetro agnosEmerito define los años que lleva como Emerito el Profesor
     */
    public ProfesorEmerito_CU00693B() {
        super();
        agnosEmerito = 0;
    } // Cierre del constructor 1
   
     /** Constructor 2 del Profesor. Atribututos con asignación de Valores
      * @param agnosEmerito El parámetro agnosEmerito define los años que lleva como Emerito el Profesor
     */
    public ProfesorEmerito_CU00693B(String nombre, int edad, int agnosConsolidados, int agnosEmerito) {
        super(nombre, edad, agnosConsolidados);
        this.agnosEmerito = agnosEmerito;
    } // Cierre del constructor 2
   
    /**
     * Método para establecer los Años que lleva el Profesor como Emerito
     * @param valorAgnosEmerito El parámetro valorAgnosEmerito define el valor de los Años como Emerito
     */
    public void setAgnosEmerito(int valorAgnosEmerito) {
        agnosEmerito = valorAgnosEmerito;
    } // Cierre del método para establecer los Años que lleva el Profesor como Emerito
   
    /**
     * Método para para obtener los Años que lleva el Profesor como Emerito
     * @return Los Años que lleva el Profesor como Emerito
     */
    public int getAgnosEmerito() { return agnosEmerito;}
   
    /**
     * Método para para obtener el Salario Base del Profesor Emerito
     * @return El Salario Base del Profesor Emerito
     */
    public double obtenerSalarioBase() {
    /* En la sigiente formula daría error al compilar si en la superclase Profesor se define "agnosConsolidados" como private
     * por usar "agnosConsolidados" directamente, sin utilizar una invocación a super ni un método get*/
        return 925 + (agnosConsolidados * 33.25) + (47.80 * agnosEmerito);
    } // Cierre del método para obtener el Salario Base del Profesor
   
    /**
     * Método para mostar la Información del Profesor Emerito
     */
    public void mostrarDatos() {
        //super.mostrarDatos(); // Se puede usar super sin problemas pero lo anulo para usar los campos directamente
        System.out.println ("Nombre: " + nombre);
        System.out.println ("De: " + edad + " años");
        System.out.println ("Con: " + agnosConsolidados + " años como Profesor Consolidado");
        System.out.println ("Más " + agnosEmerito + " años como Profesor Emerito");
        System.out.println ("Y un Sueldo Base de: " + obtenerSalarioBase());
    } // Cierre del método para mostar la Información del Profesor
   
} //Cierre de la clase

Citar
¿Es posible sin utilizar una invocación a super ni un método get?
Si. Se puede utilizar ya que protected permite que las subclases sí pueden tener acceso al campo o método.

Citar
¿Qué ocurre si el atributo en la superclase lo declaras private?
Al compilar la subclase salta un error “agnosConsolidados has private access in Profesor_CU00693B” en línea 50 “return 925 + (agnosConsolidados * 33.25) + (47.80 * agnosEmerito);“
No se permite usar directamente el atributo "agnosConsolidados" al estar como privado.

Espero vuestros comentarios,

Muchas Gracias,

Saludos,

38
Buenas Tardes,

Aquí dejo mi ejercicio del tema "CU00692B super invocar metodos superclases subclases java ejemplo basico" para su corrección:

Clase Profesor:

Código: [Seleccionar]
/**
 * EJEMPLO DE HERENCIAS, MÉTODOS POLIMÓRFICOS Y USO DE SUPER PARA LLAMAR A MÉTODOS DE SUPERCLASE.<br>
 * Esta Clase define una Superclase de la que "beberan" otras clases.<br>
 * Clase 1 del Ejercicio del Tema "CU00692B super invocar metodos superclases subclases java ejemplo basico".
 * @author Lorenzo Fernández Asensio
 * @version 20151201.01
 */
public class Profesor_CU00692B {

    // Inicialización de Atributos
    private String nombre;
    private int edad,
                agnosConsolidados;

    /**
     * Constructor 1 del Producto. Atribututos sin asignación de Valores
     * @param nombre El parámetro nombre define el Nombre del Profesor
     * @param edad El parámetro edad define la edad del Profesor
     * @param agnosConsolidados El parámetro agnosConsolidados define los años consolidados que lleva el Profesor
     */
    public Profesor_CU00692B () {
        nombre = "";
        edad = 0;
        agnosConsolidados = 0;
    } // Cierre del constructor 1

    /**
     * Constructor 2 del Producto. Atribututos con asignación de Valores
     * @param nombre El parámetro nombre define el Nombre del Profesor
     * @param edad El parámetro edad define la edad del Profesor
     * @param agnosConsolidados El parámetro agnosConsolidados define los años consolidados que lleva el Profesor
     */
    public Profesor_CU00692B (String nombre, int edad, int agnosConsolidados) {       
        this.nombre = nombre;
        this.edad = edad;
        this.agnosConsolidados = agnosConsolidados;
    } // Cierre del constructor 2

    /**
     * Método para establecer el Nombre del Profesor
     * @param valorNombre El parámetro valorNombre define el valor que contendrá el Nombre
     */
    public void setNombre(String valorNombre) {
        nombre = valorNombre;
    } // Cierre del método para establecer el Nombre del Profesor
   
    /**
     * Método para establecer la Edad del Profesor
     * @param valorEdad El parámetro valorEdad define el valor que contendrá la Edad
     */
    public void setEdad(int valorEdad) {
        edad = valorEdad;
    } // Cierre del método para establecer la Edad del Profesor
   
    /**
     * Método para establecer los Años Consolidados del Profesor
     * @param valorAgnosConsolidados El parámetro valorAgnosConsolidados define el valor que contendrá los Años Consolidados
     */
    public void setAgnosConsolidados(int valorAgnosConsolidados) {
        agnosConsolidados = valorAgnosConsolidados;
    } // Cierre del método para establecer la Edad del Profesor
   
    /**
     * Método para para obtener la Nombre del Profesor
     * @return El Nombre del Profesor
     */
    public String getNombre(){ return nombre; }
   
     /**
     * Método para para obtener la Edad del Profesor
     * @return La Edad del Profesor
     */
    public int getEdad(){ return edad; }
   
     /**
     * Método para para obtener los Años Consolidados del Profesor
     * @return Los Años Consolidados del Profesor
     */
    public int getAgnosConsolidados(){ return agnosConsolidados; }
   
    /**
     * Método para para obtener el Salario Base del Profesor
     * @return El Salario Base del Profesor
     */
    public double obtenerSalarioBase() {
        return  725 + (agnosConsolidados * 33.25);
    } // Cierre del método para obtener el Salario Base del Profesor
   
    /**
     * Método para mostar la Información del Profesor
     */
    public void mostrarDatos() {
        System.out.println ("Nombre: " + nombre);
        System.out.println ("De: " + edad + " años");
        System.out.println ("Con: " + agnosConsolidados + " años como Profesor Consolidado");
    } // Cierre del método para mostrar información del Profesor
   
} // Cierre de la Clase


Clase Profesor Emerito:

Código: [Seleccionar]
/**EJEMPLO DE HERENCIAS, MÉTODOS POLIMÓRFICOS Y USO DE SUPER PARA LLAMAR A MÉTODOS DE SUPERCLASE.<br>
 * Esta Clase define una Subclase que "bebe" de la Superclase Profesor_CU00692B.<br>
 * Clase 2 del Ejercicio del Tema "CU00692B super invocar metodos superclases subclases java ejemplo basico".
 * @author Lorenzo Fernández Asensio
 * @version 20151201.01
 */
public class ProfesorEmerito_CU00692B extends Profesor_CU00692B {
   
    //Campo específico de la subclase.
    private int agnosEmerito;
   
     /**
     * Constructor 1 del Profesor. Atribututos sin asignación de Valores
     * @param agnosEmerito El parámetro agnosEmerito define los años que lleva como Emerito el Profesor
     */
    public ProfesorEmerito_CU00692B() {
        super();
        agnosEmerito = 0;
    } // Cierre del constructor 1
   
     /** Constructor 2 del Profesor. Atribututos con asignación de Valores
      * @param agnosEmerito El parámetro agnosEmerito define los años que lleva como Emerito el Profesor
     */
    public ProfesorEmerito_CU00692B(String nombre, int edad, int agnosConsolidados, int agnosEmerito) {
        super(nombre, edad, agnosConsolidados);
        this.agnosEmerito = agnosEmerito;
    } // Cierre del constructor 2
   
    /**
     * Método para establecer los Años que lleva el Profesor como Emerito
     * @param valorAgnosEmerito El parámetro valorAgnosEmerito define el valor de los Años como Emerito
     */
    public void setAgnosEmerito(int valorAgnosEmerito) {
        agnosEmerito = valorAgnosEmerito;
    } // Cierre del método para establecer los Años que lleva el Profesor como Emerito
   
    /**
     * Método para para obtener los Años que lleva el Profesor como Emerito
     * @return Los Años que lleva el Profesor como Emerito
     */
    public int getAgnosEmerito() { return agnosEmerito;}
   
    /**
     * Método para para obtener el Salario Base del Profesor Emerito
     * @return El Salario Base del Profesor Emerito
     */
    public double obtenerSalarioBase() {
        return super.obtenerSalarioBase() + (47.80 * agnosEmerito);
    } // Cierre del método para obtener el Salario Base del Profesor
   
    /**
     * Método para mostar la Información del Profesor Emerito
     */
    public void mostrarDatos() {
        super.mostrarDatos();
        System.out.println ("Más " + agnosEmerito + " años como Profesor Emerito");
    } // Cierre del método para mostar la Información del Profesor
   
} //Cierre de la clase


Clase Test:

Código: [Seleccionar]
/**
 * EJEMPLO DE HERENCIAS, MÉTODOS POLIMÓRFICOS Y USO DE SUPER PARA LLAMAR A MÉTODOS DE SUPERCLASE.<br>
 * Esta Clase define una clase test para probar Herencias, Polimorfismos y uso de super para métodos.<br>
 * Clase 3 del Ejercicio del Tema "CU00692B super invocar metodos superclases subclases java ejemplo basico".
 * @author Lorenzo Fernández Asensio
 * @version 20151201.01
 */
public class TestHerencia_CU00692B {

    public static void main (String [ ] Args) {
       
        // Se crea un objeto Profesor
        // y se le pasan 3 parámetros que son gestionados por el constructor de la superclase Profesor
        Profesor_CU00692B profesor1 = new Profesor_CU00692B ("Daniel", 51, 30);
       
        // Se crea un objeto Profesor Emerito
        // y se le pasan 4 parámetros. 3 son gestionados por el constructor de la superclase Profesor
        // y 1 parámetro gestionado por el cosntructor de la subclase Profesor Emerito
        Profesor_CU00692B emerito1 = new ProfesorEmerito_CU00692B("Marcos", 65, 42, 10);
       
        // Se limpia la pantalla de la Consola
        System.out.println("\f");
       
        // Mostrar Datos
        emerito1.mostrarDatos();
        System.out.println ("Y con un Sueldo Base de: " + emerito1.obtenerSalarioBase());
        System.out.println("");
        profesor1.mostrarDatos();
        System.out.println ("Y con un Sueldo Base de: " + profesor1.obtenerSalarioBase());
    } //Cierre del main
   
} //Cierre de la clase

Espero vuestras correcciones,

Muchas Gracias,

Saludos,

39
Hola Alex,

OK.

Muchas gracias por todo. Por tus correcciones y tus consejos.

Un saludo,

40
Buenas días Ogramar,

Muchas gracias,


Páginas: 1 [2] 3 4 5

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".