Índice del curso de Java JSE

  1. Introducción
  2. Eclipse
  3. Resolución de problemas
  4. Clases
  5. Objetos
  6. Hola mundo
  7. Comentarios
  8. Variables
  9. Constantes
  10. Operadores
  11. Lectura de datos
  12. Estructuras de control
    1. Estructuras de control: if
    2. Switch
    3. Estructura de control: bucle for
    4. Estructura de control: bucle while
  13. Métodos
  14. Modificador static
  15. Arrays
  16. Ejercicio – juego del ahorcado
  17. Ejercicio - tres en raya
  18. Modificadores de acceso
  19. Constructores
  20. Herencia
  21. Polimorfismo
  22. Sobrecarga y sobreescritura
  23. Abstracción
  24. Interfaces
  25. Clases internas
  26. Garbage Collector
  27. String performance
  28. Encapsulamiento
  29. Contenedores
  30. Genéricos
  31. Ejercicio alta, baja, modificación y consulta en un ArrayList
  32. Ejercicio – juego de la oca
  33. Recorrer un map
  34. Sobreescritura del equals
  35. Sobreescritura del hashcode
  36. Sobreescritura del compareTo
  37. Excepciones
  38. Enumeraciones
  39. Hilos

Herencia

public class Main{
	public static void main(String[] args) {
		Hijo h = new Hijo();
		h.saludar();
	}
}

class Padre{
	public void saludar(){
		System.out.println("Hola");
	}
}

class Hijo extends Padre{
	
}

Es el mecanismo mediante el cual una clase deriva de otra, de manera que extiende su funcionalidad.

Constructores y herencia

public class Main{
	public static void main(String[] args) {
		new Hijo();
	}
}

class Hijo extends Padre{
	public Hijo() {
		System.out.println("Se ejecuta el hijo");
	}
}

class Padre{
	public Padre(){
		System.out.println("Se ejecuta el padre");
	}	
}

Output:
Se ejecuta el padre
Se ejecuta el hijo

¿Qué se verá por pantalla al ejecutar el siguiente código?

public class Main{
	public static void main(String[] args) {
		Hijo a = new Hijo("hola");
		a.mostrarMensaje();
	}
}

class Hijo extends Padre{
	Hijo(String mensaje){
		super(mensaje);
	}
}

class Padre{
	String mensaje;
	public Padre(String mensaje){

	}	

	void mostrarMensaje(){
		System.out.println(mensaje);
	}
}

Todas las clases que heredan, tienen un constructor que comienza por el método super();. Si yo no escribo este método, el compilador de java lo escribe automáticamente llamando al constructor vacío del padre. Esto puede dar problemas de compilación si el padre no tiene un constructor vacío.

public class MainConError{
	public static void main(String[] args) {
		new Hijo();
	}
}

class Hijo() extends Padre{
	public Hijo(){
		System.out.println("Se ejecuta el hijo");
	}
}

class Padre{
	public Padre(String parametro){
		System.out.println("Se ejecuta el padre");
	}	
}

Ejercicio

Desarrolle una aplicación que contenga las siguientes clases:

Diagrama del ejercio

El constructor de la clase Persona debe incrementar en una unidad la variable numInstancias.

Desarrolle una clase con el nombre Main, que contenga un método public static void main(String args[]), que al ejecutarse cree dos instancias de empleado y dos de cliente e imprima el total de instancias de persona creadas.

Ejercicio - animales

Implemente las clases del siguiente diagrama.

El método compararSonido() comprueba si el sonido que fue pasado en el constructor es más largo que el sonido almacenado en la variable static "sonidoMasLargo". Si es así, sobrescribe el valor de la variable con el nuevo valor.

Desarrolle una clase con el nombre Main, que contenga un método public static void main(String args[]), que al ejecutarse genere una instancia de Vaca, Perro y Gato pasándoles en el constructor el sonido que deben emitir ("muuuuuu", "guauguau", "miau", por ejemplo). El método "compararSonido" debe ser llamado desde dentro del constructor de la clase Animal.

Luego, imprimir el valor de la variable estática sonidoMasLargo.

Diagrama del ejercicio
icono de mandar un mailPreguntame lo que quieras!
Pablo Monteserín
contacta conmigoPablo Monteserín

El servicio de resolución de dudas técnicas es sólo para los usuarios premium. Si tienes cualquier otra duda, usa el formulario de contacto. ¡Gracias!