Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Lenguaje de Programación I
sus partes en común (atributos y métodos) lo que normalmente se abstrae en la creación de una
La relación generalización / especialización es la relación de una clase más general y una clase
más específica. La clase más específica se denomina clase hija o subclase y posee información
adicional, mientras que la clase más general se denomina clase padre o superclase.
Las subclases heredan características de las clases de las que se derivan y añaden características
específicas que las diferencian. Las clases se organizan en una estructura jerárquica.
Página 1 de 31
UNIVERSIDAD NACIONAL TECNOLÓGICA DE LIMA SUR
ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS
HERENCIA
La herencia es el mecanismo mediante el cual se puede definir una clase (subclase) sobre la base
que hayan sido declarados como public, protected o sin especificador de acceso. Una superclase
declara un miembro como protected para permitir el acceso al miembro desde el interior de sus
subclases y desde una clase que se encuentra en el mismo paquete, a la vez que impide el acceso
La nueva clase puede añadir nuevos miembros e incluso puede redefinir miembros de la
el mismo nombre que el de la superclase. Esto hace que el miembro de la superclase quede oculto
La forma general de la declaración de una clase que hereda de otra clase es la siguiente:
// Cuerpo de la clase
}
Ejemplo 1:
Un Mamífero es un Animal.
Un Ave es un Animal.
Un Pato es un Ave.
class Animal {
...
Página 2 de 31
UNIVERSIDAD NACIONAL TECNOLÓGICA DE LIMA SUR
ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS
...
...
...
...
Si una clase no tiene una superclase explícita, implícitamente su superclase es la clase Object.
...
Página 3 de 31
UNIVERSIDAD NACIONAL TECNOLÓGICA DE LIMA SUR
ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS
la siguiente forma:
super(lista de argumentos);
Esta instrucción tiene que ser la primera sentencia a ejecutarse dentro del constructor de la
subclase.
Ejemplo 2:
Define una superclase
package padre;
public class A {
// Atributos
// Constructor
this.v1=v1;
this.v2=v2;
this.v3=v3;
}
// Métodos de acceso
return v2;
Página 4 de 31
UNIVERSIDAD NACIONAL TECNOLÓGICA DE LIMA SUR
ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS
// Constructor
public B(int v1, int v2, int v3, int v4){
//super invoca al constructor de la superclase
super(v1,v2,v3);
this.v4=v4;
}
Ejemplo de uso
// procesar es un método de la clase principal que esta fuera de los paquetes padre y hijo
void procesar(){
B r = new B(1,3,5,7);
imprimir("V1:"+r.v1);
imprimir("V2:"+r.getv2());
imprimir("V3:"+r.getv3());
imprimir("V4:"+r.v4);
imprimir("Suma:"+r.suma());
Página 5 de 31
UNIVERSIDAD NACIONAL TECNOLÓGICA DE LIMA SUR
ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS
Ejemplo 3:
⎯ Un método generarCorreo() que retorna el correo formado por el primer carácter del
nombre, el primer caracter del apellido, la edad y al final “@untels.edu.pe”.
⎯ Constructor con parámetros para inicializar los atributos: apellidos, nombres, edad horas y
tarifa
⎯ Constructor con parámetros para inicializar los atributos: apellidos, nombres, edad y las
tres notas
Página 6 de 31
UNIVERSIDAD NACIONAL TECNOLÓGICA DE LIMA SUR
ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS
Por último, implemente el método Procesar en un jFrameForm para crear objetos de Docente y
Solución:
package padre;
//propiedades
protected String apellidos;
protected String nombre;
protected int edad;
//constructor
//inicializa valor de sus propiedades
Página 7 de 31
UNIVERSIDAD NACIONAL TECNOLÓGICA DE LIMA SUR
ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS
package hijo;
import padre.Persona;
//proiedades
private double horas;
private double tarifa;
//constructor
//inicializa apellidos, nombres, edad horas y tarifa
public Docente(String ap, String nom, int ed, double h, double t)
{
//invoca al constructor de la clase Persona
super(ap, nom, ed);
//asigna valor a las horas y tarifa
horas = h;
tarifa = t;
}
Página 8 de 31
UNIVERSIDAD NACIONAL TECNOLÓGICA DE LIMA SUR
ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS
package hijo;
import padre.Persona;
//propiedades
private double nota1;
private double nota2;
private double nota3;
//constructor:
//inicializa apellidos, nombres, edad y las tres notas
public Alumno(String ap, String nom, int ed, double n1, double n2,
double n3) {
super(ap, nom, ed);
nota1 = n1;
nota2 = n2;
nota3 = n3;
}
Página 9 de 31
UNIVERSIDAD NACIONAL TECNOLÓGICA DE LIMA SUR
ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS
Codificación
public JFramePersona() {
initComponents();
//invocar método
desactivarCuadrosTexto(false);
}
Página 10 de 31
UNIVERSIDAD NACIONAL TECNOLÓGICA DE LIMA SUR
ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS
void procesar(){
String nom=txtnom.getText();
String ap=txtap.getText();
int ed=Integer.parseInt(txted.getText());
if (rdsueldo.isSelected()==true){
double ht=Double.parseDouble(txtht.getText());
double t=Double.parseDouble(txtt.getText());
//instancia de la clase docente
Docente objd=new Docente(ap, nom, ed, ht, t);
//invocar a resultado
resultado(objd.mostrarDatos());
}
if (rdpromedio.isSelected()==true){
double n1=Double.parseDouble(txtn1.getText());
double n2=Double.parseDouble(txtn2.getText());
double n3=Double.parseDouble(txtn3.getText());
//instacia de la clase alumno
Alumno obja=new Alumno(ap, nom, ed, n1, n2, n3);
//Invocar a resultado
resultado(obja.mostrarDatos());
}
}
//método resultado para mostrar cuadro de dialogo
void resultado(String msg){
JOptionPane.showMessageDialog(this,msg);
}
//eventos
private void rdsueldoActionPerformed(java.awt.event.ActionEvent evt) {
opcionActivar(true);
}
procesar();
}
Página 11 de 31
UNIVERSIDAD NACIONAL TECNOLÓGICA DE LIMA SUR
ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS
Ejecución de la aplicación:
Página 12 de 31
UNIVERSIDAD NACIONAL TECNOLÓGICA DE LIMA SUR
ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS
Página 13 de 31
UNIVERSIDAD NACIONAL TECNOLÓGICA DE LIMA SUR
ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS
Página 14 de 31
UNIVERSIDAD NACIONAL TECNOLÓGICA DE LIMA SUR
ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS
Ejemplo 4:
controlar los sueldos de sus empleados los cuales están organizados en dos
tipos: los empleados asalariados y los de comisión, la diferencia radica en que los
que asciende a un 10% del sueldo mensual, mientras que los de comisión tienen
una asignación mensual dependiendo del monto vendido durante el mes, existe
un monto adicional asignado a todos los empleados por comisión que tienen
más de tres años de servicio. En ambos casos los datos de los empleados son:
Página 15 de 31
UNIVERSIDAD NACIONAL TECNOLÓGICA DE LIMA SUR
ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS
Súper clase
Sub clases
Implementación:
package semana2.padre;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Empleado {
//propiedades
private int codigo;
private String nombre;
private String telefono;
private String fechaingreso;
private String sexo;
Página 16 de 31
UNIVERSIDAD NACIONAL TECNOLÓGICA DE LIMA SUR
ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS
Página 17 de 31
UNIVERSIDAD NACIONAL TECNOLÓGICA DE LIMA SUR
ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS
if (mes < 0) {
year = year - 1;
} else if (mes == 0) {
int dia = Integer.parseInt(dat2[0]) -
Integer.parseInt(dat1[0]);
if (dia > 0) {
year = year - 1;
}
}
return year;
}
}
Página 18 de 31
UNIVERSIDAD NACIONAL TECNOLÓGICA DE LIMA SUR
ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS
package semana2.hijo;
import semana2.padre.Empleado;
public class Asalariado extends Empleado {
//constuctor
public Asalariado() {
//sueldo fijo
this.sbruto = 1800;
}
}
package semana2.hijo;
import semana2.padre.Empleado;
}
return sueldo;
}
}
Página 19 de 31
UNIVERSIDAD NACIONAL TECNOLÓGICA DE LIMA SUR
ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS
Frame:frmEmpleado
jFormattedTextField
jComboBox
jTextArea1
package semana2.gui;
import semana2.hijo.Asalariado;
public class frmAsalariado extends javax.swing.JFrame {
Página 20 de 31
UNIVERSIDAD NACIONAL TECNOLÓGICA DE LIMA SUR
ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS
public frmEmpleado() {
initComponents();
//titulo del frame
setTitle("Control de Pagos");
//tamaño del frame
setSize(700, 500);
//
//Evento click del botón Registrar
private void btnregistrarActionPerformed(java.awt.event.ActionEvent
evt) {
//crear objeto de la clase Asalariado
Asalariado objAsalariado=new Asalariado();
//asignar valores a sus propiedades del objeto asalariado
objAsalariado.setCodigo(getCodigo());
objAsalariado.setNombre(getNombre());
objAsalariado.setFechaingreso(getFechaIngreso());
objAsalariado.setSexo(getSexo());
//salida de datos
String
rs=objAsalariado.getCodigo()+"\t"+objAsalariado.getNombre()+"\t"+objAs
alariado.getSexo()+"\t"+objAsalariado.calculaAñosServicio()+"\t\t"+obj
Asalariado.calculaDescuento()+"\t"+objAsalariado.calculaNeto();
listaResultado(rs);
Página 21 de 31
UNIVERSIDAD NACIONAL TECNOLÓGICA DE LIMA SUR
ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS
Ejecución de la aplicación:
Página 22 de 31
UNIVERSIDAD NACIONAL TECNOLÓGICA DE LIMA SUR
ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS
Ejercicio propuesto
Un banco requiere controlar las cuentas de sus clientes y para ello las clasifica en dos:
cheques y ahorros. Todas las cuentas del banco tienen los siguientes datos:
• Fecha de vencimiento.
Página 23 de 31
UNIVERSIDAD NACIONAL TECNOLÓGICA DE LIMA SUR
ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS
POLIMORFISMO
En la sesión de clase anterior, la herencia se ha utilizado solamente para heredar los miembros
de una clase base, pero también existe la posibilidad de que un método de una clase derivada se
El polimorfismo se refiere al hecho de que un mismo método adopte múltiples formas. Esto se
a = Sumar(c,d);
a = Sumar(c,d,5);
En este caso la signatura es la misma (refinamiento o reemplazo del método del padre) pero
Página 24 de 31
UNIVERSIDAD NACIONAL TECNOLÓGICA DE LIMA SUR
ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS
La clase Animal tiene definidos los métodos comer y crecer, ambos son públicos y no devuelven
Página 25 de 31
UNIVERSIDAD NACIONAL TECNOLÓGICA DE LIMA SUR
ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS
La clase Caballo, hereda todas las características de Animal, por lo tanto, en primer instancia,
Caballo también posee los métodos crecer y comer.
SOBRECARGAR
Lo que haremos en este momento es sobrecargar uno o los dos métodos de la clase Animal en la
clase Caballo, veamos:
package Polimorfismo;
public class Principal {
c.comer();
c.comer("pasto");
c.crecer();
c.crecer(25);
}
}
Página 26 de 31
UNIVERSIDAD NACIONAL TECNOLÓGICA DE LIMA SUR
ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS
Resultado:
Notemos que podemos invocar al método comer en sus dos versiones, tanto en la superclase
como en la clase hija, en la clase padre se encuentra el método genérico y en la clase hija en método
sobrecragado. Podemos sobrecargar métodos en la misma clase tanto en la clase padre como en
package Polimorfismo;
//Método sobrecargado
public void comer(String comida, int kilos){
System.out.println("El animal come "+kilos+" kilos de "+comida);
}
Página 27 de 31
UNIVERSIDAD NACIONAL TECNOLÓGICA DE LIMA SUR
ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS
package Polimorfismo;
public class Principal {
c.comer();
c.comer("pasto");
c.comer("pasto",5);
c.crecer();
c.crecer(25);
c.crecer(2, 15);
}
}
Resultado:
Página 28 de 31
UNIVERSIDAD NACIONAL TECNOLÓGICA DE LIMA SUR
ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS
Notemos que podemos invocar a todos los métodos sobrecragados de ambas clases, tanto a la
SOBREESCRIBIR
mezclar ambos conceptos, recordar que la sobre-escritura de métodos tiene que ver con la
package Polimorfismo;
Página 29 de 31
UNIVERSIDAD NACIONAL TECNOLÓGICA DE LIMA SUR
ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS
veamos el ejemplo:
package Polimorfismo;
public class Caballo extends Animal{
/*notemos que ambos métodos han sido declarados en la superclase pero en esta clase
hija se están redefiniendo y colocando argumentos distintos al de la clase padre*/
Página 30 de 31
UNIVERSIDAD NACIONAL TECNOLÓGICA DE LIMA SUR
ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS
Vemos que tenemos la sobre-escritura tanto de los métodos originales como los sobrecargados en
la clase padre, notemos también que podemos combinar la sobrecarga y la sobre-escritura de los
métodos.
escritura solo se da con la herencia, es decir, solo en las clases hijas podremos implementar el
concepto de sobre-escritura.
Página 31 de 31