Herencia. Programación básica java: Tutorial 14.

La idea de herencia es sencilla pero poderosa: cuando se quiere crear una nueva clase y ya existe una clase que incluye código que vas a usar, se puede derivar la nueva clase a partir de la clase existente. Al hacer esto, se puede utilizar tanto las propiedades, como los métodos de esa clase, sin tener que escribirlos de nuevo.

Para poder comprender esto vamos a verlo en un ejemplo. En este ejemplo vamos a crear un hotel para perros, donde vamos a registrarlos mediante su nombre, peso y color, reutilizando la clase Dog de los pasados tutoriales.

 package com.edu4java.tutorial13;

/**
 * A class is a mould from which we can create objects or instances
 * An object is an instance of a class
 * 
 * JavaBeans are reusable software components for Java
 * that can be manipulated visually in a builder tool.
 */
public class Dog {
	// instance variables

	private String name;
	private double weight;
	private String colour;

	
	public String getName() {
		return name;
	}


	public void setName(String name) {
		this.name = name;
	}
	

	public double getWeight() {
		return weight;
	}


	public void setWeight(double weight) {
		this.weight = weight;
	}


	public String getColour() {
		return colour;
	}


	public void setColour(String colour) {
		this.colour = colour;
	}


	public void printToConsole() {
		System.out.print(" name: " + getName());
		System.out.print(" colour: " + this.colour);
		System.out.println(" weight: " + this.weight);

	}
}

 

Después de registrar los perros con el método insertDog(), los imprimimos por consola para mostrar cada uno de los perros. En la siguiente instrucción de la clase "Tutorial13", les damos de comer 500gr de comida con el método feed(dogs) y los volvermos a imprimir para ver que pesan 500gramos más.

 package com.edu4java.tutorial13;

public class Tutorial13 {

	public static void main(String[] args) {
		Dog[] dogs = insertDog();
		printDogsOnConsole(dogs);
		feed(dogs);
		System.out.println("After eating------------");
		printDogsOnConsole(dogs);

	}

	private static void feed(Dog[] dogs) {
		for (int i = 0; i < dogs.length; i++) {
			// we give feed them with 500gr of food
			double weightBeforefeeding = dogs[i].getWeight();
			dogs[i].setWeight(weightBeforefeeding + 0.5);
		}

	}

	private static void printDogsOnConsole(Dog[] dogs) {
		for (int i = 0; i < dogs.length; i++) {
			dogs[i].printToConsole();
		}

	}

	private static Dog[] insertDog() {

		Dog[] dogs = new Dog[4];

		// list of Dogs
		String[] names = { "Coco", "Sultan", "Boby", "Drak" };
		String[] colours = { "brown", "black", "white", "blue" };
		double[] weight = { 1.5, 75, 3.5, 45.1 };

		for (int i = 0; i < dogs.length; i++) {
			Dog dog = new Dog();
			dog.setName(names[i]);
			dog.setColour(colours[i]);
			dog.setWeight(weight[i]);
			dogs[i] = dog;

		}
		return dogs;
	}

}

 

Ahora queremos añadir una nueva propiedad a nuestro perro; "portion" (ración). No podemos modificar la clase "Dog" porque está siendo utilizada en otras clases, por lo que creamos una nueva clase Dog2 extendiéndola de Dog, con la nueva propiedad "portion". De esta manera tenemos una clase Dog2 con todas las propiedades de nuestra antigua clase Dog; "name", "colour" y "weight" y además una nueva propiedad "portion", añadida en la clase Dog2.

 package com.edu4java.tutorial13;

public class Dog2 extends Dog {

	private double portion;

	public double getPortion() {
		return portion;
	}

	public void setPortion(double portion) {
		this.portion = portion;
	}
	
	
}

Ahora sustituimos Dog por Dog2 y trabajamos con esta nueva clase, para darle de comer a cada perro, una ración específica, dependiendo de su peso;

 package com.edu4java.tutorial13;

public class Tutorial13 {

	public static void main(String[] args) {
		Dog2[] dogs = insertDog();
		printDogsOnConsole(dogs);
		feed(dogs);
		System.out.println("After eating------------");
		printDogsOnConsole(dogs);

	}

	private static void feed(Dog2[] dogs) {
		for (int i = 0; i < dogs.length; i++) {
			double weightBeforefeeding = dogs[i].getWeight();
			dogs[i].setWeight(weightBeforefeeding + dogs[i].getPortion());
		}

	}

	private static void printDogsOnConsole(Dog2[] dogs) {
		for (int i = 0; i < dogs.length; i++) {
			dogs[i].printToConsole();
		}


	}

	private static Dog2[] insertDog() {

		Dog2[] dogs = new Dog2[4];

		// list of Dogs
		String[] names = { "Coco", "Sultan", "Boby", "Drak" };
		String[] colours = { "brown", "black", "white", "blue" };
		double[] weight = { 1.5, 75, 3.5, 45.1 };
		double[] portion = { 0.2, 1, 0.2, 0.8 };

		for (int i = 0; i < dogs.length; i++) {
			Dog2 dog = new Dog2();
			dog.setName(names[i]);
			dog.setColour(colours[i]);
			dog.setWeight(weight[i]);
			dog.setPortion(portion[i]);
			dogs[i] = dog;

		}
		return dogs;
	}

}


 
<< Anterior Siguiente >>