Clases Figuras

package com.trifulcas.figuras;

public abstract class Figura {
	private String nombre;
	
	public abstract void dibujar();

	protected String getNombre() {
		return nombre;
	}

	protected void setNombre(String nombre) {
		this.nombre = nombre;
	}
	
	
}

package com.trifulcas.figuras;

public abstract class Figura2D extends Figura {
	public abstract double area();
}

package com.trifulcas.figuras;

public abstract class Figura3D extends Figura2D{

	public abstract double volumen();
}

package com.trifulcas.figuras;

public class Cuadrado extends Figura2D {
	private double lado;
	
	protected double getLado() {
		return lado;
	}
	protected void setLado(double lado) {
		this.lado = lado;
	}
	public Cuadrado(double lado) {
		this.lado=lado;
	}
	@Override
	public double area() {
		// TODO Auto-generated method stub
		return lado*lado;
	}

	@Override
	public void dibujar() {
		System.out.println("Cuadrado");

	}

}

package com.trifulcas.figuras;

public class Circulo extends Figura2D {
	private double radio;
	
	
	protected double getRadio() {
		return radio;
	}

	protected void setRadio(double radio) {
		this.radio = radio;
	}

	public Circulo(double radio) {
		
		this.radio = radio;
	}

	@Override
	public double area() {
		return Math.PI*radio*radio;
	}

	@Override
	public void dibujar() {
		System.out.println("Círculo");

	}

}

package com.trifulcas.figuras;

public class Cubo extends Figura3D {
	private double lado;

	protected double getLado() {
		return lado;
	}

	protected void setLado(double lado) {
		this.lado = lado;
	}

	public Cubo(double lado) {
		this.lado = lado;
	}

	@Override
	public double volumen() {
		return Math.pow(lado, 3);
	}

	@Override
	public double area() {
		// Se puede hacer más sencillo pero así también
		// Ojo que acoplamos cubo a cuadrado
		Cuadrado c=new Cuadrado(lado);
		return c.area() * 6;
	}

	@Override
	public void dibujar() {
		System.out.println("Cubo");
	}

}

package com.trifulcas.figuras;

public class Esfera extends Figura3D {
private double radio;
	
	
	protected double getRadio() {
		return radio;
	}

	protected void setRadio(double radio) {
		this.radio = radio;
	}

	public Esfera(double radio) {
		
		this.radio = radio;
	}

	@Override
	public double volumen() {
		return 4/3*Math.PI*Math.pow(radio, 3);
	}

	@Override
	public double area() {
		return 4*Math.PI*Math.pow(radio, 2);
	}

	@Override
	public void dibujar() {
		// TODO Auto-generated method stub

	}

}
Cuadrado c=new Cuadrado(2);
		System.out.println(c.area());
		
		Circulo ci=new Circulo(1);
		System.out.println(ci.area());
		
		Cubo cu=new Cubo(2);
		System.out.println(cu.area());
		System.out.println(cu.volumen());
		
		Esfera e=new Esfera(1);
		System.out.println(e.area());
		System.out.println(e.volumen());


 

Y más ejemplos interfaces


public interface IGirar {
	public void izquierda();
	public void derecha();
}

public interface IAvanzar {
	public void adelante();
	public void atras();
}

public interface IVertical {
	public void arriba();
	public void abajo();
}

public class Tren implements IAvanzar {

	@Override
	public void adelante() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void atras() {
		// TODO Auto-generated method stub
		
	}

}


public class Coche implements IAvanzar, IGirar {

	@Override
	public void izquierda() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void derecha() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void adelante() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void atras() {
		// TODO Auto-generated method stub
		
	}

}

public class Torreta implements IGirar {

	@Override
	public void izquierda() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void derecha() {
		// TODO Auto-generated method stub
		
	}

}

public class Helicoptero implements IAvanzar, IGirar, IVertical {

	@Override
	public void arriba() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void abajo() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void izquierda() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void derecha() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void adelante() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void atras() {
		// TODO Auto-generated method stub
		
	}

}

Ejemplos Interfaces

public interface IVolar {
	public void volar();
}

public interface INadar {
	public void nadar();
}

public interface ICorrer {
	public void correr();
}

public interface IActivo {
	public boolean esActivo();
}

public interface ISaludo {
	public void hola();
	public void adios();
}

public class Delfin implements INadar, IActivo{

	@Override
	public void nadar() {
		System.out.println("Soy un delfín nadando en el inmenso mar");
		
	}

	@Override
	public boolean esActivo() {
		// TODO Auto-generated method stub
		return true;
	}

}

public class Pato implements IVolar, ICorrer, INadar, IActivo{

	@Override
	public void nadar() {
		System.out.println("Pato Nadando");
		
	}

	@Override
	public void correr() {
		System.out.println("Corriendo");
		
	}

	@Override
	public void volar() {
		System.out.println("Volando");
		
	}

	@Override
	public boolean esActivo() {
		// TODO Auto-generated method stub
		return true;
	}

}

public class Submarino implements INadar, IActivo {

	@Override
	public void nadar() {
		System.out.println("Inmersión!!");
	}

	@Override
	public boolean esActivo() {
		// TODO Auto-generated method stub
		return false;
	}

}


	public static void main(String[] args) {
		// El mismo polimorfismo que teniamos con la herencia
		// Lo tenemos con los interfaces

		ArrayList<INadar> cosas = new ArrayList<>();
		comprobar(new Delfin());
		comprobar(new Pato());
		comprobar(new Submarino());

		List<String> alumnos = new ArrayList<String>();

		Saludos pepe=new Saludos();
		pepe.hola();
		ISaludo ana=new Saludos();
		ana.adios();
	}

	public static void comprobar(IActivo elemento) {
		if (elemento.esActivo()) {
			System.out.println("A tope con la actividad");
		}
	}

Ejemplo Abstracta

public abstract class FiguraGeometrica {

	private int lados;

	public int getLados() {
		return lados;
	}

	public void setLados(int lados) {
		this.lados = lados;
	}
	
	public void yuju() {
		for(int i=0;i<10;i++) {
			System.out.println("¡YUJU!!");
		}
	}
	// Como un contrato en el que las clases derivadas
	// Se comprometen a implementarlos
	public abstract double perimetro();
	public abstract double area();
	
}

public class Cuadrado extends FiguraGeometrica {

	@Override
	public double perimetro() {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public double area() {
		// TODO Auto-generated method stub
		return 0;
	}

	

}


public class Rectangulo extends FiguraGeometrica {
	private double ancho;
	private double alto;

	public Rectangulo(double ancho, double alto) {
		this.ancho = ancho;
		this.alto = alto;
	}

	public Rectangulo(double ancho) {
		this(ancho,1);
	}

	public Rectangulo() {
		this(1);
	}

	public double getAncho() {
		return ancho;
	}

	public void setAncho(double ancho) {
		this.ancho = ancho;
	}

	public double getAlto() {
		return alto;
	}

	public void setAlto(double alto) {
		this.alto = alto;
	}

	public double perimetro() {
		return ancho * 2 + alto * 2;
	}

	public double area() {
		return ancho * alto;
	}

	public boolean oblongo() {
		return ancho > alto;
	}

}

Ejemplos polimorfismo


public class Empleado {
	private String nombre;
	protected int sueldo;
	
	// getters y setters
	public String getNombre() {
		return nombre;
	}
	public void setNombre(String nombre) {
		this.nombre = nombre;
	}
	
	public void setSueldo(int sueldo) {
		if (sueldo>900 && sueldo <10000) {
			this.sueldo = sueldo;
		}
		
	}
	public double sueldoNeto() {
		return sueldo*.87;
	}
	
	@Override
	public String toString() {
		return "Empleado [nombre=" + nombre + ", sueldo=" + sueldo + "]";
	}
	
}


public class Comercial extends Empleado {
	private double comision;
	private int ventas;
	
	public double getComision() {
		return comision;
	}
	public void setComision(double comision) {
		this.comision = comision;
	}
	public int getVentas() {
		return ventas;
	}
	public void setVentas(int ventas) {
		this.ventas = ventas;
	}
	@Override
	public double sueldoNeto() {
		return super.sueldoNeto()+ventas*comision;
	}
	
	
	
}


public class Directivo extends Empleado {
	@Override
	public double sueldoNeto() {
		return super.sueldoNeto()*2;
	}
}

	ArrayList<Vehiculo> tropa=new ArrayList<>();
		
		tropa.add(new Coche()); // Un coche es un vehículo
		tropa.add(new Bicicleta()); // Esto también
		tropa.add(new Coche());
		tropa.add(new Tanque()); // Y eso también lo es
		
		for(Vehiculo v:tropa) {
			v.acelerar(); // al acelerar estoy llamando al método de cada objeto
			v.derecha();
			System.out.println(v);
		}
		
		Empleado pepe=new Empleado();
		pepe.setSueldo(1000);
		Comercial ana=new Comercial();
		ana.setSueldo(1000);
		ana.setComision(.05);
		ana.setVentas(20000);
		Directivo antonio=new Directivo();
		antonio.setSueldo(5000);
		
		ArrayList<Empleado> empresa=new ArrayList<>();
		empresa.add(pepe);
		empresa.add(ana);
		empresa.add(antonio);
		int total=0;
		for(Empleado e:empresa) {
			total+=e.sueldoNeto();
			System.out.println(e.sueldoNeto());
		}
		System.out.println(total);
		
	}

Ejercicio Vehículo


public class Vehiculo {
	private int velocidad;
	private int direccion;
	protected int velocidadMaxima;
	protected int velocidadIncremento;
	protected int direccionIncremento;
	public Vehiculo() {
		// Me está diciendo como se comporta mi clase
		velocidadMaxima=200;
		velocidadIncremento=10;
		direccionIncremento=10;
	}
	public void acelerar() {
		velocidad+=velocidadIncremento;
		if (velocidad>velocidadMaxima) {
			velocidad=velocidadMaxima;
		}
	}
	public void frenar() {
		velocidad-=velocidadIncremento;
		if (velocidad<0) {
			velocidad=0;
		}
	}
	
	public void izquierda() {
		direccion+=direccionIncremento;
		if (direccion>=360) {
			direccion-=360;
		}
	}
	public void derecha() {
		direccion-=direccionIncremento;
		if (direccion<0) {
			direccion+=360;
		}
	}
	@Override
	public String toString() {
		return "Vehiculo [velocidad=" + velocidad + ", direccion=" + direccion + "]";
	}
	
	
	
}


public class Coche extends Vehiculo {
	public Coche() {
		velocidadMaxima=150;
	}
}


public class Bicicleta extends Vehiculo {

	public Bicicleta() {
		velocidadIncremento=3;
	}
}


public class Tanque extends Vehiculo {
	public Tanque() {
		direccionIncremento=90;
	}
}

Vehiculo v=new Vehiculo();
		v.acelerar();
		v.acelerar();
		v.derecha();
		v.derecha();
		System.out.println(v);
		for(int i=0;i<50;i++) {
			v.acelerar();
			v.derecha();
			System.out.println(v);
		}
		
		Coche c= new Coche();
		for(int i=0;i<50;i++) {
			c.acelerar();
			
			System.out.println(c);
		}
		
		Bicicleta b= new Bicicleta();
		for(int i=0;i<50;i++) {
			b.acelerar();
			
			System.out.println(b);
		}
		
		Tanque t=new Tanque();
		for(int i=0;i<5;i++) {
			t.derecha();
			
			System.out.println(t);
		}

Ejercicio Ikea


public class Producto {
	protected String nombre;
	protected String familia;
	public Producto(String nombre, String familia) {
		super();
		this.nombre = nombre;
		this.familia = familia;
	}
	public String getNombre() {
		return nombre;
	}
	public void setNombre(String nombre) {
		this.nombre = nombre;
	}
	public String getFamilia() {
		return familia;
	}
	public void setFamilia(String familia) {
		this.familia = familia;
	}
	
	
}

public class Asiento extends Producto{
	protected int patas;
	
	public Asiento(String nombre, String familia, int patas) {
		super(nombre, familia);
		this.patas=patas;
	}
	
	
}

public class Sillon extends Asiento {
	private String color;
	public Sillon(String nombre, String familia) {
		super(nombre, familia, 4);
	}
	public String getColor() {
		return color;
	}
	public void setColor(String color) {
		this.color = color;
	}

	
}

public class Sofa extends Asiento {

	private String material;
	
	public Sofa(String nombre, String familia, int patas) {
		super(nombre, familia, patas);
	}

	public String getMaterial() {
		return material;
	}

	public void setMaterial(String material) {
		this.material = material;
	}

}
Producto p=new Producto("Börkjlon","Strogürl");
		Asiento a=new Asiento("Gïorlda","Weuipr",4);
		
		Sillon sillon=new Sillon("Forlidër","Forlüder");
		Sofa sofa= new Sofa("Gïorlda","Weuipr",4);
	

Ejercicio Persona


public class Persona {
	private String nombre;
	private String dni;
	
	public Persona(String nombre) {
		this.nombre=nombre;
	}
	
	public String saludo() {
		return "Hola "+nombre;
	}

	public String getNombre() {
		return nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	public String getDni() {
		return dni;
	}

	public void setDni(String dni) {
		this.dni = dni;
	}
	
}
public class Caballero extends Persona {
	private String tratamiento;
	private int renta;
	
	public Caballero(String nombre, String tratamiento) {
		super(nombre);
		this.tratamiento=tratamiento;
	}

	@Override
	public String saludo() {
		return "Hola "+tratamiento+" "+getNombre();
	}

	public String getTratamiento() {
		return tratamiento;
	}

	public void setTratamiento(String tratamiento) {
		this.tratamiento = tratamiento;
	}

	public int getRenta() {
		return renta;
	}

	public void setRenta(int renta) {
		this.renta = renta;
	}
	
}
public class Plebeyo extends Persona {

	public Plebeyo(String nombre) {
		super(nombre);
	}

	@Override
	public String saludo() {
		return super.saludo()+" ¿Qué pasa?";
	}
}
	Persona pepe=new Persona("pepe");
		System.out.println(pepe.saludo());
		Caballero pelayo=new Caballero("Pelayo", "Don");
		System.out.println(pelayo.saludo());
		Plebeyo sancho=new Plebeyo("Sancho Panza");
		System.out.println(sancho.saludo());

Ejemplo clase completa y uso


public class Rectangulo {
	private double ancho;
	private double alto;

	public Rectangulo(double ancho, double alto) {
		this.ancho = ancho;
		this.alto = alto;
	}

	public double getAncho() {
		return ancho;
	}

	public void setAncho(double ancho) {
		this.ancho = ancho;
	}

	public double getAlto() {
		return alto;
	}

	public void setAlto(double alto) {
		this.alto = alto;
	}

	public double perimetro() {
		return ancho * 2 + alto * 2;
	}

	public double area() {
		return ancho * alto;
	}

	public boolean oblongo() {
		return ancho > alto;
	}

}
Rectangulo r=new Rectangulo(2,3);
		r.setAlto(9);
		System.out.println(r.getAlto());
		System.out.println(r.area());
		System.out.println(r.oblongo());

Ejemplo Crear clases

//Instanciar una clase en un objeto
		Auto bmw=new Auto();
		
		Auto seat;
		
		// Puedo acceder a las cosas que he definido en la clase
		bmw.color="Azul metalizado";
		bmw.arrancar();

		
		// Para usar un objeto lo tengo que instanciar
		seat=new Auto();
		
		seat.color="Verde";
		Auto[] concesionario= {bmw,seat,new Auto(),new Auto(),new Auto()};
		concesionario[0].color="Rojo";
		
		System.out.println(bmw.color);
		
		
		seat=new Auto();
		// seat ----> [color,arrancar] (Auto@372f7a8d)
		System.out.println(seat);
		Auto copia=seat; // no copio el objeto, apuntan al mismo sitio
		// Si cambio uno cambio el otro y viceversa
		// seat ----> [color,arrancar]
		// copia ------^
		System.out.println(copia); //Auto@372f7a8d
		
		Auto clonado=new Auto();
		clonado.color=bmw.color;

Auto miCoche = new Auto();
		miCoche.color = "Rosa";
		miCoche.arrancar();
		miCoche.estado();
		miCoche.acelerar();
		miCoche.estado();
		for (int i = 0; i < 10; i++) {
			miCoche.acelerar(200);
		}
		miCoche.estado();
		
		Alumno ana=new Alumno();
		ana.nombre="Ana Pi";
		ana.notas.addAll(Arrays.asList(1,2,3,4,5,6));
		
		System.out.println(ana.media());
// Definición de la clase, no es un objeto
public class Auto {
	public String color;
	int velocidad;
	int limiteVelocidad = 100;

	public void arrancar() {
		velocidad = 0;
		System.out.println("Brum brum ");
	}

	public void acelerar() {
		acelerar(10);

	}

	public void acelerar(int cantidad) {
		velocidad += cantidad;
		if (velocidad > 100) {
			velocidad = 100;
		}

	}

	public void frenar() {
		if (velocidad > 10) {
			velocidad -= 10;
		}
	}

	public void estado() {
		System.out.println("Vamos a " + velocidad + " por horaa!!");
	}
}

import java.util.ArrayList;
public class Alumno {
	// El public es un modificador de acceso
	// Quiere decir que cualquiera puede acceder al valor
	public String nombre;
	// Tenemos tres sabores de protección
	// public, protected y private
	private ArrayList<Integer> notas;

	// Los parámetros que queremos poner al crear la clase
	public Alumno(String nombre) {
		// Las cosas que queremos que se ejecuten
		// cuando creamos la clase
		// this.nombre es el nombre del objeto
		// nombre es el parámetro que le pasamos
		this.nombre = nombre;
		notas = new ArrayList<Integer>();
	}

	public Alumno() {
		// Llamando a la sobrecarga del constructor
		this("anonimo");

	}

	public int ponNota(int nota) {
		// Me aseguro de que mis notas están entre 0  10
		if (nota > 0 && nota <= 10) {
			notas.add(nota);
		}
		return notas.size();
	}

	public double media() {

		double total = 0;
		// Desde dentro de la clase si que puedo acceder
		for (int nota : notas) {
			total += nota;
		}
		return total / this.notas.size();
	}
}