package com.trifulcas.repaso.oop; // La herencia se implementa con extends // AlumnoIntercambio deriva de Alumno // Alumno es la superclase o clase madre // y AlumnoIntercambio la clase hija o derivada o subclase public class AlumnoIntercambio extends Alumno { private String paisOrigen; public String getPaisOrigen() { return paisOrigen; } public void setPaisOrigen(String paisOrigen) { this.paisOrigen = paisOrigen; } public AlumnoIntercambio(String nombre, int nota, String email) { super(nombre, nota, email); } public void saludo() { // Recordad que las propiedades private no son visibles desde // la clase derivada, esto da error // System.out.println("hola "+nombre); System.out.println("hola "+getNombre()); } // Sobreescribir los métodos que heredo de la clase madre // Y tener otra implementación, en este caso el toString @Override public String toString() { // La palabra clave super hace referencia a la clase madre // Aquí lo usamos para acceder al método toString de Alumno return "AlumnoIntercambio [paisOrigen=" + paisOrigen + ", " + super.toString() + "]"; } }
package com.trifulcas.repaso.oop; public class TestOOP { public static void main(String[] args) { AlumnoIntercambio john=new AlumnoIntercambio("John",6,"eee"); // Al derivar de alumno John tiene todas las propiedades // Y métodos que tiene alumno System.out.println(john.getAprobado()); john.setMail("pepe@pee.com"); System.out.println(john); // La subclase puede tener sus propios métodos y propiedades john.setPaisOrigen("Bélgica"); System.out.println(john); Alumno eva=new Alumno("Eva",6,"wwww"); // La superclase no tiene las propiedades de las subclases // Esto da error eva.getPaisOrigen() // Yo puedo definir una variable como la clase madre // Pero instanciarla como la clase hija // Para qué? Polimorfismo Alumno pep=new AlumnoIntercambio("pep",4,"ww"); } }