You are on page 1of 23

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 trmino superclase se refiere a la clase que es el
ancestro ms directo, as como a todas las clases
ascendentes.

Superclases y Subclases.

Herencia en Java.
Consiste en crear nuevas clases partiendo de clases
existentes, que tendrn todas los atributos y los
mtodos de su 'superclase' o 'clase padre' y adems
se le podrn aadir otros atributos y mtodos
propios.
Las relaciones de herencia forman estructuras
jerrquicas en forma de rbol.
Una superclase existe en una relacin jerrquica con
sus subclases.
En algunos casos, una clase es tanto superclase
como subclase.

Ejemplo: Figuras.
Esta jerarqua empieza con la superclase Figura.
Se extiende con FiguraBidimensional y
Tridimensional.
El tercer nivel contiene tipos ms especficos.
Por ejemplo, un Triangulo es FiguraBidimensional.

Public / Private / Protected


1. 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 slo 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

protected

No

No especificado

No

No

private

No

No

No

1.Ejemplo: Suma y Resta


Implementar dos clases: Suma y Resta.
Cada clase tiene como atributo valor1, valor2 y resultado.
Los mtodos a definir son:
cargar: para ingresar valores.
operar: suma o resta los valores.
mostrarResultado: muestra el resultado
La relacin 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 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(); } }

class Suma extends Operacion{


void operar() {
resultado=valor1+valor2; } }

https://paste.ee/p/H9seB

Ejemplo 2:
Persona - Empleado
Crear una clase Persona que tenga como atributos el
nombre y la edad.
Definir un mtodo que cargue los datos personales y
otro que los imprima.
Plantear una segunda clase Empleado que herede de
la clase Persona.
Aadir sueldo y los mtodos de cargar el sueldo e
imprimir.
Definir un objeto de la clase Persona y llamar a sus
mtodos.
Tambin crear un objeto de la clase Empleado y
llamar a sus mtodos.

package prueba;
import java.util.Scanner;
class Persona {
protected Scanner entrada;
protected String nombre;
protected int edad;
public Persona() {
entrada=new Scanner(System.in); }

class Empleado extends Persona {


protected int sueldo;
public void cargarSueldo() {
System.out.print("Ingrese sueldo:");
sueldo=entrada.nextInt(); }

public void cargarDatos() {


System.out.print("Ingrese nombre:");
nombre=entrada.next();
System.out.print("Ingrese edad:");
edad=entrada.nextInt(); }

public class Prueba {


public static void main(String[] ar) {
Empleado empleado1=new Empleado();
empleado1.cargarDatos();
empleado1.cargarSueldo();
empleado1.imprimirDatos();
empleado1.imprimirSueldo(); } }

public void imprimirDatos() {


System.out.println("Nombre:"+nombre);
System.out.println("Edad:"+edad); } }

public void imprimirSueldo() {


System.out.println("El sueldo es:"+sueldo); } }

https://paste.ee/p/63WKu

Interfaces visuales.
Componentes Swing.
Hasta ahora hemos resuelto todos los algoritmos
haciendo las salidas a travs de una consola en
modo texto.
La realidad que es muy comn la necesidad de
hacer la entrada y salida de datos mediante una
interfaz ms amigables con el usuario.

Ejemplo 3: Hola Mundo


package 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 Versin.
Confeccionar una ventana que muestre el nombre
de un programa en la parte superior y su nmero
de versin en la parte inferior.
No permitir modificar el tamao de la ventana en
tiempo de ejecucin.

Ejemplo 4:
Programa y Versin.
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 - JButton
Confeccionar una ventana que muestre un botn.
Cuando se presione finalizar la ejecucin 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");
https://paste.ee/p/hzRaF
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);
}}

Interface ActionListener
La mecnica para atrapar el clic se hace mediante la
implementacin de una interface.
Una interface es un protocolo que permite la
comunicacin 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 botn mostrar el
valor ingresado en la barra de ttulos 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 mltiples lneas, 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);
}
http://paste.ee/p/krGAA

public static void main(String[] ar) {


Formulario formulario1=new Formulario();
formulario1.setBounds(0,0,540,400);
formulario1.setVisible(true);
}}

You might also like