Inicio
Software
Programación
HTML Programación - PHP (ini) Programación - PHP POO Programación - PHP / HTML SQL Java
Hardware
Desarrollos
Quién soy Mapa del sitio

Programación - Java 12

Imprimir
Categoría: Java
Escrito por Ch4rl1X Visitas: 512

Herencia, polimorfismo y otras yerbas.

Fundamental para nuestros lenguajes, la herencia permite trabajar con los métodos de las clases que extiende, para heredar, es cuestión de crear nuetra nuevas clases, ya sea dentro de un mismo archivo o en archivos separados (como siempre se recomienda), veamosló:

Para ejemplo heredamos de la clase teléfonos móviles, creamos el constructor, este tiene que tener la misma cantidad de parámetros que la clase que hereda y se definen tal cual lo vemos allí, se llama al método super, que obtiene los parámetros. En nuestra nueva clase generamos un Setter:

Y luego un Getter que va a procesar el valor del Setter devolviendo el precio de gama alta que le pasemos por parámetro:

Se observa que se llama al método aumentaPrecio de nuestra clase padre con el método super y se almacena en una variable local aumentoPrecio, abajo vemos definida la variable de clase encapsulada.

Veamos como instanciar nuestra gama alta:

Luego llamamos a movilgamaalta desde el mismo array para mostrarlo en pantalla:

Recordar cambiar el valor de la cantidad de parámetros que recibe el array para que agrege el modelo de gama alta.

Codigo de la clase GamaAlta:

package charlesWeb_poo1;

public class GamaAlta extends TelefonosMoviles {
	
	public GamaAlta(String modeloMovil, double altoMovil, double anchoMovil, double pesoMovil, int memoriaMovil, String camaraMovil, int microprocesador) {
		/*Pasamos los parámetros de la clase padre de lo contrario marcará error*/
		/*NO requeriere definición de las variables*/
		super(modeloMovil, altoMovil, anchoMovil, pesoMovil, memoriaMovil, camaraMovil, microprocesador);
		
	}
	
	public void generaPrecioGamaAlta(double precioAlta) {//Setter
		precioGamaAlta = precioAlta;
	}
	
	/*Se sobreescribe el método anterior*/
	public double aumentaPrecio() {//Getter
		/*Llamamos al método de la clase padre para subir el precio de acuerdo al parámetro pasado en precio alta*/
		double aumentoPrecio = super.aumentaPrecio();
		
		return aumentoPrecio + precioGamaAlta;
		
	}

	
	private double precioGamaAlta;

}

Codigo de la clase teléfonos móviles (del cual no se ha realizado ningún cambio:

package charlesWeb_poo1;

public class TelefonosMoviles {

	private String modelo;
	private String color;
	private double alto;
	private double ancho; 
	private double peso;
	private int memoria;
	private String camara;
	private int microprocesador;
	private double precio = 1000;
	
	/*Creamos el constructor de la clase TelefonosMoviles, recordar que el 
	 * constructor de una clase se da alta llamando el método igual que la clase*/
	
	public TelefonosMoviles(String modeloMovil, double altoMovil, double anchoMovil, double pesoMovil, int memoriaMovil, String camaraMovil, int microprocesadorMovil) {
	/*Aquí definimos las variables a utilizar en el constructor*/
		
		/*Le pasamos al constructor que cada una da las variables es igual a las variables de la declaración inicial*/
		modelo = modeloMovil;
		alto = altoMovil;
		ancho = anchoMovil;
		peso = pesoMovil; 
		memoria = memoriaMovil;
		camara = camaraMovil; 
		microprocesador = microprocesadorMovil;

	}
	
	/*Generamos el método setter*/
	/*Los métodos setter "setean" el valor de las variables
	 * por lo que no devuelven nada*/
	public void generaColor(String colorCelu) {
		color = colorCelu;
	}
	public String reciboModelo() {
		return modelo;
	}
	public double reciboAlto() {//Getter
		return alto;
	}
	public double reciboAncho() {//Getter
		return ancho;
	}
	public double reciboPeso() {//Getter
		return peso;
	}
	public int reciboMemoria() {//Getter
		return memoria;
	}
	public String reciboCamara() {//Getter
		return camara;
	}
	public int reciboMicroprocesador() {//Getter
		return microprocesador;
	}
	public double aumentaPrecio() {//Getter
		return precio;
	}
	
	/*Setter para incremeto de ram*/
	public void aumentaPrecio(int porcAumento) {
		double aumentoPrecio = precio * porcAumento / 100;
		
		precio += aumentoPrecio;
	}
	
	/*Setter para el incremento de núcleos*/
	
	
	
	/*Generando el metodo Getter*/
	/*El método Getter, devuelve valor y Java pide que siempre tenga la instrucción return*/
	public String devuelveColor() {
		return "El color del celular es: " + color;
	}
	
	
}

Codigo del main:

/*Al estar dentro del mismo paquete se heredan todas las clases y métodos*/
package charlesWeb_poo1;

public class DefinoMovil {

	public static void main(String[] args) {

		/*Para almacenar nuestro objeto en un array, al igual que si se tratase de una variable con varios parámetros
		 * tenemos que llamar a nuestra clase, para luego llamar al constructor y pasarle la cantidad de valores
		 * que contiene*/

		TelefonosMoviles[] modelos = new TelefonosMoviles[3];
		
		/*Instanciamos la clase que hereda de TelefonosMoviles*/
		GamaAlta movilgamaalta = new GamaAlta("GA2000", 16, 13, 115, 3000, "Si", 4);
		/*Le paso el precio de la gama alta a su método*/
		movilgamaalta.generaPrecioGamaAlta(500);

		
		/*Llamamos a la variable y le pasamos el parámetro 1*/
		modelos[0] = new TelefonosMoviles("T1000",15, 12, 110, 1000, "Si", 2);
		modelos[1] = new TelefonosMoviles("T1100", 15, 12, 115, 1500, "Si", 3);
		modelos[2]	= movilgamaalta;
		
		/*Bucle for each mejorado para recorrer los modelos de nuestros teléfonos*/
		for(TelefonosMoviles t: modelos) {
			/*Imprimimos en pantalla*/
			System.out.println("El movil es modelo " + t.reciboModelo() +" de : " + t.reciboAlto() + " cm y un ancho: " + t.reciboAncho() + ""
					+ " cm, tiene un peso de " + t.reciboPeso() + " gr y tiene " + t.reciboMemoria() + "mb de RAM. \nEspecificaciones:\n"
							+ "Camara: " + t.reciboCamara() + "\nPrecio: " + t.aumentaPrecio());
		}

	}

}



El resultado:

El precio del movil gama alta aumenta porque así se lo hemos pasado a la clase padre.

Saludos, Ch4rl1X