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(); } }