Download INTRODUCCION (32456)
Document related concepts
no text concepts found
Transcript
INTRODUCCION Los programas se crean a partir de objetos, los cuales son instancias de clases. Algunas clases están en la biblioteca de Java y otras las escribe el programador, buscamos clases útiles en la biblioteca y que hemos escrito en el pasado. Con la herencia podemos usar una clase existente como la base para crear una clase modificada. *PROTECTED Cundo usamos la herencia, prívate es un término demasiado privado y posible es demasiado pública. Si una clase necesitaba a sus clases acceso acierto variable o métodos especifico, pero debe evitar que otra clase accedan a estos, puede etiquetarlas como protected. Este método necesita acceso las variables X y Y postergación son inaccesibles y que se le etiquetaron como prívate, para anticiarnos este posible uso en el. public class Persona { private String nombre; private String apellidos; private int edad; public Persona() { nombre = ""; apellidos = ""; edad = 0; } public Persona (String nombre, String apellidos, int edad) { this.nombre = nombre; this.apellidos = apellidos; this.edad = edad; } public String getNombre() { return nombre; } public String getApellidos() { return apellidos; } public int getEdad() { return edad; } public String toString() { Integer datoEdad = edad; return "-Nombre: ".concat(nombre).concat(" -Apellidos: ").concat(apellidos).concat(" Edad: ").concat(datoEdad.toString() ); } } //Cierre de la clase INTRODUCCION DE HERENCIA Vamos a empezar con una clase similar a la que y hemos usado varias veces el libro. Es una clase para poder presentar a una esfera. Una esfera tiene un radio y una posición en el espacio, debe aparecer como un circulo (el método para mostrar una esfera simplemente invoca el método de biblioteca drwOval). Import java.awt.*; Public class Esfera { Protected int x = 100, y = 100 Public void setX (int nuevaX) { X = nuevaX; } Public void setY (int nuevaY) { Y = nuevaY; } Public void mostrar(Grphics papel) { Papel.draeOval(x, y, 20, 20); } } sUPER Algunas veces una clase necesita llamar un método de su superclase inmediata. No hay problema con esto, ya que los métodos de todas las clases en los niveles superiores del árbol de herencia están disponibles, siempre y cuando estén etiquetados como public o protected, hay un problema que puede sugerir es cuando e4l método deseado de la superclase tiene el mismo nombre que un método de la clase actual. Por ejemplo, para llamar al método mostrar de una superclase use lo siguiente: //Código de la clase Persona ejemplo aprenderaprogramar.com public class Persona { private String nombre; private String apellidos; private int edad; //Constructor public Persona (String nombre, String apellidos, int edad) { this.nombre = nombre; this.apellidos = apellidos; this.edad = edad; } //Métodos public String getNombre () { return nombre; } public String getApellidos () { return apellidos; public int getEdad () { return edad; } //Cierre de la clase } } FINAL Los procesos de heredar y redefinir, se enfocan en cambiar el comportamiento de las clases y los objetos. La herencia es muy poderosa, pero algunas veces es reconfortante que algunas cosas estén fijas y no se puedan modificar, sqrt, que es lo que hace drawLine. POO siempre existe el peligro de que alguien extienda las clases a las que estas pertenecen y en consecuencia cambie lo que hace. Esto podría ser por error o en un intento inadvertido de ser útil, para evitar esto el programador puede describir un método como final. La mayoría de los métodos se describen como final. Final doublé cmPerInch = 2.54; //Ejemplo aprenderaprogramar.com //Sintaxis: CaracterPublico/Privado static final TipoDeLaConstante = valorDeLaConstante; private static final float PI = 3.1416f; //Recordar f indica que se trata de un float private static double PI = 3.1416; public static final String passwd = "jkl342lagg"; public static final int PRECIO_DEFAULT = 100; ABSTRACTO El sentido está en que una superclase permite unificar campos y métodos de las subclases, evitando la repetición de código y unificando procesos. Ahora bien, una clase de la que no se tiene intención de crear objetos, sino que únicamente sirve para unificar datos u operaciones de subclases, puede declararse de forma especial en Java: como clase abstracta. La declaración de que una clase es abstracta se hace con la sintaxis public abstract class NombreDeLaClase { … }. Por ejemplo public abstract class Profesor. Cuando utilizamos esta sintaxis, no resulta posible instanciar la clase, es decir, no resulta posible crear objetos de ese tipo. Sin embargo, sigue funcionando como superclase de forma similar a como lo haría una superclase “normal”. La diferencia principal radica en que no se pueden crear objetos de esta clase. import java.util.*; abstract class Instrumento { public abstract void tocar(); public String tipo() { return "Instrumento"; } public abstract void afinar(); } class Guitarra extends Instrumento { public void tocar() { System.out.println("Guitarra.tocar()"); } public String tipo() { return "Guitarra"; } public void afinar() {} } class Piano extends Instrumento { public void tocar() { System.out.println("Piano.tocar()"); } public String tipo() { return "Piano"; } public void afinar() {} } class Saxofon extends Instrumento { public void tocar() { System.out.println("Saxofon.tocar()"); } public String tipo() { return "Saxofon"; } public void afinar() {} } // Un tipo de Guitarra class Guzla extends Guitarra { public void tocar() { System.out.println("Guzla.tocar()"); } public void afinar() { System.out.println("Guzla.afinar()"); } } // Un tipo de Guitarra class Ukelele extends Guitarra { public void tocar() { System.out.println("Ukelele.tocar()"); } public String tipo() { return "Ukelele"; } } public class Musica2 { // No importa el tipo de Instrumento, // seguirá funcionando debido a Polimorfismo: static void afinar(Instrumento i) { // ... i.tocar(); } static void afinarTodo(Instrumento[] e) { for(int i = 0; i < e.length; i++) afinar(e[i]); } public static void main(String[] args) { // Declarar un Arreglo SIN INSTANCIAS es valido en Clases Abstractas Instrumento[] orquesta = new Instrumento[5]; // Generar una INSTANCIA de una la Clase Abstracta no es valido // Instrumento nuevo = new Instrumento(); int i = 0; // Up-casting al asignarse el Arreglo orquesta[i++] = new Guitarra(); orquesta[i++] = new Piano(); orquesta[i++] = new Saxofon(); orquesta[i++] = new Guzla(); orquesta[i++] = new Ukelele(); afinarTodo(orquesta); } }