9.herencia en java
-
Upload
ramiro-estigarribia-canese -
Category
Technology
-
view
229 -
download
0
Transcript of 9.herencia en java
9.Clases y Objetos: Herencia
Ramiro Estigarribia Canese
Superclase y Subclase➔ Al crear una clase, en vez de declarar miembros
completamente nuevos, el programador puede designar que la nueva clase herede los miembros de una clase existente.
➔ Esta clase existente se conoce como superclase, y la nueva clase se conoce como subclase.
➔ El C++ se refieren a la superclase como la clase base, y a la subclase como clase derivada.
➔ Cada subclase puede convertirse en la superclase de futuras subclases.
Superclase y Subclase.Definiciones.➔ Una subclase es una clase que desciende de otra
clase. Una subclase hereda el estado y el comportamiento de todos sus ancestros.
➔ El término superclase se refiere a la clase que es el ancestro más directo, así como a todas las clases ascendentes.
Superclases y Subclases.
Herencia en Java.➔ Consiste en crear nuevas clases partiendo de clases
existentes, que tendrán todas los atributos y los métodos de su 'superclase' o 'clase padre' y además se le podrán añadir otros atributos y métodos propios.
➔ Las relaciones de herencia forman estructuras jerárquicas en forma de árbol.
➔ Una superclase existe en una relación jerárquica con sus subclases.
➔ En algunos casos, una clase es tanto superclase como subclase.
Ejemplo: Figuras.➔ Esta jerarquía empieza con la superclase Figura. ➔ Se extiende con FiguraBidimensional y Tridimensional. ➔ El tercer nivel contiene tipos más específicos.
Por ejemplo, un Triangulo es FiguraBidimensional.
Public / Private / Protected1. Los miembros public son accesibles en cualquier
parte en donde el programa tenga una referencia a un objeto de esa clase, o una de sus subclases.
2. Los miembros private sólo dentro de la misma clase. Los miembros private de una superclase no son heredados por sus subclases.
3. Protected ofrece un nivel intermedio entre public y private.Los miembros protected de una superclase pueden ser utilizados por los miembros de esa superclase, de sus subclases y otras clases en el mismo paquete.
Public / Private / Protected
Modificador Clase Paquete Subclase Todos
public Sí Sí Sí Sí
protected Sí Sí Sí No
No especificado Sí Sí No No
private Sí No No No
1.Ejemplo: Suma y RestaImplementar dos clases: Suma y Resta. Cada clase tiene como atributo valor1, valor2 y resultado. Los métodos a definir son: ➔ cargar: para ingresar valores.➔ operar: suma o resta los valores. ➔ mostrarResultado: muestra el resultado
La relación de herencia que podemos disponer para este problema es: Operacion
SumaResta
package prueba;import java.util.Scanner;class Operacion {protected Scanner entrada;protected int valor1;protected int valor2;protected int resultado;public Operacion() {entrada=new Scanner(System.in); }public void cargar() {System.out.print("Ingrese 2 numeros:");valor1=entrada.nextInt(); valor2=entrada.nextInt(); } public void mostrarResultado() {System.out.println(resultado); } }
class Suma extends Operacion{void operar() {resultado=valor1+valor2; } }
class Resta extends Operacion {public void operar(){resultado=valor1-valor2; } }
public class Prueba {public static void main(String[] ar) {Suma suma1=new Suma();suma1.cargar();suma1.operar();System.out.print("Suma:");suma1.mostrarResultado();Resta resta1=new Resta();resta1.cargar();resta1.operar();System.out.print("Resta:");resta1.mostrarResultado(); } }
https://paste.ee/p/H9seB
Ejemplo 2: Persona - Empleado➔ Crear una clase Persona que tenga como atributos el
nombre y la edad. ➔ Definir un método que cargue los datos personales y
otro que los imprima.➔ Plantear una segunda clase Empleado que herede de
la clase Persona. ➔ Añadir sueldo y los métodos de cargar el sueldo e
imprimir.➔ Definir un objeto de la clase Persona y llamar a sus
métodos. ➔ También crear un objeto de la clase Empleado y
llamar a sus métodos.
package prueba;import java.util.Scanner;class Persona { protected Scanner entrada; protected String nombre; protected int edad; public Persona() { entrada=new Scanner(System.in); } public void cargarDatos() { System.out.print("Ingrese nombre:"); nombre=entrada.next(); System.out.print("Ingrese edad:"); edad=entrada.nextInt(); } public void imprimirDatos() { System.out.println("Nombre:"+nombre); System.out.println("Edad:"+edad); } }
class Empleado extends Persona {protected int sueldo;
public void cargarSueldo() {System.out.print("Ingrese sueldo:");sueldo=entrada.nextInt(); } public void imprimirSueldo() {System.out.println("El sueldo es:"+sueldo); } }
public class Prueba { public static void main(String[] ar) { Empleado empleado1=new Empleado(); empleado1.cargarDatos(); empleado1.cargarSueldo(); empleado1.imprimirDatos(); empleado1.imprimirSueldo(); } }
https://paste.ee/p/63WKu
Interfaces visuales.Componentes Swing.➔ Hasta ahora hemos resuelto todos los algoritmos
haciendo las salidas a través de una consola en modo texto.
➔ La realidad que es muy común la necesidad de hacer la entrada y salida de datos mediante una interfaz más amigables con el usuario.
Ejemplo 3: Hola Mundopackage formulario;import javax.swing.*;public class Formulario extends JFrame{ private JLabel label1; public Formulario() { setLayout(null); label1=new JLabel("Hola Mundo."); label1.setBounds(10,20,200,30); add(label1); }
public static void main(String[] ar) { Formulario formulario1=new Formulario(); formulario1.setBounds(10,10,400,300); formulario1.setVisible(true); } }
https://paste.ee/p/DoG0X
Ejemplo 4: Programa y Versión.➔ Confeccionar una ventana que muestre el nombre
de un programa en la parte superior y su número de versión en la parte inferior.
➔ No permitir modificar el tamaño de la ventana en tiempo de ejecución.
Ejemplo 4: Programa y Versión.
package formulario;import javax.swing.*;public class Formulario extends JFrame {private JLabel label1,label2;public Formulario() {setLayout(null);label1=new JLabel("Nuevo Sistema.");label1.setBounds(10,20,300,30);add(label1);label2=new JLabel("Vesion 1.0");label2.setBounds(10,100,100,30);add(label2); }
public static void main(String[ ] ar) {Formulario formulario1=new Formulario();
formulario1.setBounds(0,0,300,200);formulario1.setResizable(false);formulario1.setVisible(true);} }
https://paste.ee/p/gz9Lm
Ejemplo 5:Swing - JButtonConfeccionar una ventana que muestre un botón. Cuando se presione finalizar la ejecución del programa Java.
package formulario;import javax.swing.*;import java.awt.event.*;public class Formulario extends JFrame implements ActionListener { JButton boton1; public Formulario() { setLayout(null); boton1=new JButton("Finalizar"); boton1.setBounds(300,250,100,30); add(boton1); boton1.addActionListener(this); }
public void actionPerformed(ActionEvent e) { if (e.getSource()==boton1) {System.exit(0); } }
public static void main(String[] ar) { Formulario formulario1=new Formulario(); formulario1.setBounds(0,0,450,350); formulario1.setVisible(true); } }
https://paste.ee/p/hzRaF
Interface ActionListener➔ La mecánica para atrapar el clic se hace mediante la
implementación de una interface. ➔ Una interface es un protocolo que permite la
comunicación entre dos clases. ➔ Por ejemplo la interface ActionListener tiene la siguiente
estructura:
interface ActionListener { public void actionPerformed(ActionEvent e) {}
Ejemplo 6:Swing - JTextField➔ Confeccionar un programa que permita ingresar el
nombre y cuando se presione un botón mostrar el valor ingresado en la barra de títulos del JFrame.
package formulario;import javax.swing.*;import java.awt.event.*;public class Formulario extends JFrame implements ActionListener{ private JTextField textfield1; private JLabel label1; private JButton boton1; public Formulario() { setLayout(null); label1=new JLabel("Usuario:"); label1.setBounds(10,10,100,30); add(label1); textfield1=new JTextField(); textfield1.setBounds(120,10,150,20); add(textfield1); boton1=new JButton("Aceptar"); boton1.setBounds(10,80,100,30); add(boton1); boton1.addActionListener(this); }
public void actionPerformed(ActionEvent e) {if (e.getSource()==boton1) {String cad=textfield1.getText();setTitle(cad);} }
public static void main(String[] ar) {Formulario formulario1=new Formulario(); formulario1.setBounds(0,0,300,150);formulario1.setVisible(true);} }
http://paste.ee/p/TDJMr
Ejemplo 7:Swing - JTextArea➔ JTextArea permite ingresar múltiples líneas, a
diferencia del control de tipo JTextField.➔ Confeccionar un programa que permita ingresar un mail
en un control de tipo JTextField y el cuerpo del mail en un control de tipo JTextArea.
package formulario;import javax.swing.*;public class Formulario extends JFrame{ private JTextField textfield1; private JTextArea textarea1; public Formulario() { setLayout(null); textfield1=new JTextField(); textfield1.setBounds(10,10,200,30); add(textfield1); textarea1=new JTextArea(); textarea1.setBounds(10,50,400,300); add(textarea1);}
public static void main(String[] ar) { Formulario formulario1=new Formulario(); formulario1.setBounds(0,0,540,400); formulario1.setVisible(true);} }
http://paste.ee/p/krGAA