9.herencia en java

23
9.Clases y Objetos: Herencia Ramiro Estigarribia Canese

Transcript of 9.herencia en java

Page 1: 9.herencia en java

9.Clases y Objetos: Herencia

Ramiro Estigarribia Canese

Page 2: 9.herencia en java

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.

Page 3: 9.herencia en java

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.

Page 4: 9.herencia en java

Superclases y Subclases.

Page 5: 9.herencia en java

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.

Page 6: 9.herencia en java

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.

Page 7: 9.herencia en java

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.

Page 8: 9.herencia en java

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

Page 9: 9.herencia en java

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

Page 10: 9.herencia en java

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

Page 11: 9.herencia en java

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.

Page 12: 9.herencia en java

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

Page 13: 9.herencia en java

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.

Page 14: 9.herencia en java

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

Page 15: 9.herencia en java

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.

Page 16: 9.herencia en java

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

Page 17: 9.herencia en java

Ejemplo 5:Swing - JButtonConfeccionar una ventana que muestre un botón. Cuando se presione finalizar la ejecución del programa Java.

Page 18: 9.herencia en 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

Page 19: 9.herencia en java

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) {}

Page 20: 9.herencia en java

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.

Page 21: 9.herencia en java

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

Page 22: 9.herencia en java

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.

Page 23: 9.herencia en java

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