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