package com.trifulcas.repaso.oop; // Las clases las definimos con la palabra clave class // Y el nombre de la clase primera en mayúsculas // Recordad que en java el nombre del archivo y la clase debe ser el mismo public class Alumno { // Lo habitual es que todas las propiedades sean private // Para evitar que se puedan modificar desde el exterior private String nombre; private int nota; private String mail; // Las propiedades o métodos estáticos solo existen una vez // (es decir, hay una única instancia para todos los objetos de esta clase) // Podemos acceder a ellos sin instanciar un objeto // La información es compartida por todos private static int notaCorte=5; // El constructor es la manera como se construye la instancia // de la clase. Es el punto de entrada // Podemos tener parámetros o no y podemos tener sobrecargas // Un ejemplo típico sería este. Usamos todas las propiedades public Alumno(String nombre, int nota, String email) { // La palabra clave this hace referencia al propio objeto // La usamos para desambiguar entre el nombre de los parámetros // y de las propiedades de la clase this.nombre = nombre; this.nota = nota; // Aquí no hace falta desambiguar porque se llaman diferente mail = email; } // Yo los constructores los puedo sobrecargar public Alumno(String nombre, int nota) { this.nombre = nombre; this.nota = nota; mail = "No tiene"; // this(nombre,nota,"No tiene") } // Si yo hago sobrecarga lo suyo es que llamemos al otro constructor public Alumno(String nombre) { /* Si yo quiero hacer esto this.nombre = nombre; this.nota = 0; mail = "No tiene"; Lo mejor es hacer esto: */ this(nombre,0,"No tiene"); // this hace referencia al constructor } public String getNombre() { return nombre; } public void setNombre(String nombre) { this.nombre = nombre; } public int getNota() { return nota; } public void setNota(int nota) { this.nota = nota; } public String getMail() { return mail; } public void setMail(String mail) { this.mail = mail; } public boolean getAprobado() { // La nota de corte es la misma para todos los objetos return nota>=notaCorte; } public static int getNotaCorte() { return notaCorte; } public static void setNotaCorte(int notaCorte) { Alumno.notaCorte = notaCorte; } @Override public String toString() { return "Alumno [nombre=" + nombre + ", nota=" + nota + ", mail=" + mail + "]"; } }
package com.trifulcas.repaso.oop; public class Utils { // Si mi clase tiene métodos estáticos public static boolean esPrimo(int numero) { for (int i = 2; i < numero; i++) { if (numero % i == 0) { return false; } } return true; } public static boolean esPar(int numero) { return numero % 2 == 0; } }
package com.trifulcas.repaso.oop; import java.util.Arrays; public class TestOOP { public static void main(String[] args) { Alumno ana=new Alumno("Ana",7,"ana@ana.com"); System.out.println(ana.getNotaCorte()); // Si yo cambio el valor de la nota de corte ana.setNotaCorte(7); Alumno eva = new Alumno("Eva",6); // La cambio para todos los objetos System.out.println(eva.getNotaCorte()); // Puedo acceder sin instanciar el objeto Alumno.setNotaCorte(8); System.out.println(eva.getNotaCorte()); System.out.println(ana.getNotaCorte()); Alumno[] clase=new Alumno[10]; // Creando 10 alumnos for(int i=0;i<10;i++) { clase[i]=new Alumno("Alumno"+i,i); } System.out.println(Arrays.toString(clase)); // Yo puedo usar los métodos estáticos de una clase sin necesidad // de instanciar un objeto de esa clase System.out.println(Utils.esPar(10)); System.out.println(Utils.esPrimo(17)); // Esto no es necesario Utils foo=new Utils(); System.out.println(foo.esPar(8)); } }