Descargar la presentación
La descarga está en progreso. Por favor, espere
Publicada porOrlando Rivera Modificado hace 5 años
1
Tema 5 H erencia
2
La herencia es una forma de reutilización de software en la que las clases se crean incorporando los datos (atributos) y el comportamiento (métodos) de una clase existente Herencia
3
- Una subclase es más específica que una superclase y representa a un conjunto más especializado de objetos - La subclase puede eventualmente ser una superclase de otra clase. - La superclase directa es la clase a partir de la cual la subclase hereda de forma explicita Herencia
4
Herencia simple: una clase se deriva de una superclase Herencia múltiple: una clase se deriva de más de una superclase directa Java no soporta herencia múltiple!!! Herencia
5
Las subclases son clases más especializadas SuperclaseSubclases FiguraCirculo, Triangulo, Rectangulo EmpleadoDocente, Administrativo CuentaBancariaCuentaDebito, CuentaCredito Herencia
6
Figura FiguraBidimensionalFiguraTridimensional CirculoCuadradoTrianguloEsferaCuboTetraedro Herencia
7
Miembros protected El modificador de acceso protected permite que los miembros definidos en una clase con este modificador sean utilizados por: -Los miembros de esa clase (la superclase en este caso) -Las clases que hereden de ella (las subclases) -Las clases en el mismo paquete Herencia
8
Miembros protected El modificador de acceso protected permite que los miembros definidos en una clase con este modificador sean utilizados por: -Los miembros de esa clase (la superclase en este caso) -Las clases que hereden de ella (las subclases) -Las clases en el mismo paquete * A diferencia de public, un atributo protected no puede ser accedido por una clase en un paquete diferente en el cual fue definido Herencia
9
Electrodoméstico protected double precio; protected String marca; apagar() encender() Nevera private int dimensionCongelador obtenerDimension(); obtenerIVA(); Lavadora private int cantidadCiclos; obtenerCantidadCiclos(); mostrarCiclos(); Herencia
10
import javax.swing.*; public class Electrodomestico{ protected int precio; protected String marca; public Electrodomestico(int p, String m){ precio = p; marca = m; } public void obtenerPrecio(){ JOptionPane.showMessageDialog(null, "Precio: " + precio); } public void obtenerMarca(){ JOptionPane.showMessageDialog(null, "Marca: " + marca); } public void apagar(){ System.out.println("El electrodomestico se apagará"); }
11
import javax.swing.*; public class Nevera extends Electrodomestico{ private int dimensionCongelador; public Nevera(int p, String m, int d){ super(p,m); dimensionCongelador = d; } public int obtenerDimension(){ return dimensionCongelador; } public void obtenerIVA() { JOptionPane.showMessageDialog(null, "IVA: " + (precio * 0.16) ); }
12
import javax.swing.*; public class Nevera extends Electrodomestico{ private int dimensionCongelador; public Nevera(int p, String m, int d){ super(p,m); dimensionCongelador = d; } public int obtenerDimension(){ return dimensionCongelador; } public void obtenerIVA() { JOptionPane.showMessageDialog(null, "IVA: " + (precio * 0.16) ); } } Se pueden usar las variables definidas en la superclase como si hicieran parte de esta clase
13
public class UsoElectrodomestico { public static void main(String a[]) { Nevera objeto1 = new Nevera(3000000, "LG", 30); objeto1.obtenerPrecio(); objeto1.obtenerIVA(); System.exit(0); }
14
public class UsoElectrodomestico { public static void main(String a[]) { Nevera objeto1 = new Nevera(3000000, "LG", 30); objeto1.obtenerPrecio(); objeto1.obtenerIVA(); System.exit(0); } Se pueden usar los métodos definidos en la superclase como si hicieran parte de esta clase
15
public class UsoElectrodomestico { public static void main(String a[]) { Nevera objeto1 = new Nevera(3000000, "LG", 30); objeto1.obtenerPrecio(); objeto1.obtenerIVA(); System.exit(0); } Electrodomesticos – Nevera – Lavadora- UsoElectrodomensticos
16
Miembros protected Todos los miembros public y protected de una superclase mantienen su modificador de acceso original cuando se convierten en miembros de un subclase Una subclase puede efectuar cambios en los miembros private de la superclase SOLO a través de los métodos no private que se proporcionen en la superclase Herencia
17
Sobrescritura de métodos Cuando se hereda de una superclase, sus métodos y variables llegan a ser parte de la subclase (cuidando los casos private). Sin embargo, en la subclase se puede definir nuevamente métodos que se llamen igual, esto se conoce como sobrescritura de métodos Herencia
18
Persona protected String nombre; protected String cedula; private String estadoCivil; Persona() cambiarEstadoCivil(String nuevo) obtenerEstadoCivil() Trabajador protected int salario; Trabajador() obtenerSalario() aumentarSalario(int aumento) Herencia
19
Persona protected String nombre; protected String cedula; private String estadoCivil; Persona() cambiarEstadoCivil() obtenerEstadoCivil() Trabajador protected int salario; Trabajador() obtenerSalario() aumentarSalario() Estudiante protected double promedio; Estudiante() obtenerPromedio() cambiarPromedio() Herencia
20
Persona protected String nombre; protected String cedula; private String estadoCivil; Persona() cambiarEstadoCivil() obtenerEstadoCivil() Trabajador protected int salario; Trabajador() obtenerSalario() aumentarSalario() Estudiante protected double promedio; Estudiante() obtenerPromedio() cambiarPromedio() Herencia Docente protected int puntuacion; Docente() aumentarPuntuacion() obtenerSalario()* NoDocente protected int cantidadSalariosM; NoDocente() obtenerSalario()* *Sobrescrito
21
Super Permite especificar que se quiere utilizar un método de la superclase. Es útil cuando se sobrescriben métodos Herencia
22
Considere el siguiente ejemplo: Herencia Clase Circulo Clase Cilindro
23
Considere el siguiente ejemplo: Herencia Clase Circulo Clase Cilindro La clase Cilindro puede heredar de Círculo el método para calcular el área de un círculo y el radio. Tendrá que completar la definición con el atributo altura
24
public class Circulo { private double radio; public Circulo(double r) { radio=r; } public double obtenerRadio() { return radio; } public double obtenerArea() { return Math.PI*radio*radio; } public double obtenerPerimetro() { return 2*Math.PI*radio; }
25
public class Cilindro extends Circulo { private double altura; public Cilindro(double r, double a) { super(r); altura=a; } public double obtenerAltura() { return altura; } public double obtenerArea() { return obtenerPerimetro()*altura + 2*super.obtenerArea(); } public double obtenerVolumen() { return super.obtenerArea()*altura; }
26
public class Cilindro extends Circulo { private double altura; public Cilindro(double r, double a) { super(r); altura=a; } public double obtenerAltura() { return altura; } public double obtenerArea() { return obtenerPerimetro()*altura + 2*super.obtenerArea(); } public double obtenerVolumen() { return super.obtenerArea()*altura; } La clase Cilindro hereda de la clase Circulo
27
public class Cilindro extends Circulo { private double altura; public Cilindro(double r, double a) { super(r); altura=a; } public double obtenerAltura() { return altura; } public double obtenerArea() { return obtenerPerimetro()*altura + 2*super.obtenerArea(); } public double obtenerVolumen() { return super.obtenerArea()*altura; } super para utilizar el constructor de la superclase, en este caso el de la clase Circulo
28
public class Cilindro extends Circulo { private double altura; public Cilindro(double r, double a) { super(r); altura=a; } public double obtenerAltura() { return altura; } public double obtenerArea() { return obtenerPerimetro()*altura + 2*super.obtenerArea(); } public double obtenerVolumen() { return super.obtenerArea()*altura; } Como ya existe un método llamado obtenerArea en la superclase, se sobrescribe de tal forma que el área se calcule ahora para un cilindro
29
public class Cilindro extends Circulo { private double altura; public Cilindro(double r, double a) { super(r); altura=a; } public double obtenerAltura() { return altura; } public double obtenerArea() { return obtenerPerimetro()*altura + 2*super.obtenerArea(); } public double obtenerVolumen() { return super.obtenerArea()*altura; } } Se hace referencia al método obtenerArea de la superclase. Como existe en esta clase con el mismo nombre, se utiliza super
30
public class Cilindro extends Circulo { private double altura; public Cilindro(double r, double a) { super(r); altura=a; } public double obtenerAltura() { return altura; } public double obtenerArea() { return obtenerPerimetro()*altura + 2*super.obtenerArea(); } public double obtenerVolumen() { return super.obtenerArea()*altura; } No se necesita utilizar super porque no existe en esta clase un método que se llame igual
31
import javax.swing.*; public class UsoCilindro { public static void main(String a[]) { JTextArea miArea=new JTextArea(10,25); JScrollPane miScroll=new JScrollPane(miArea); Cilindro unCilindro=new Cilindro(1.0, 5.0); miArea.append("Datos del cilindro"); miArea.append("\nRadio de la base: " + unCilindro.obtenerRadio()); miArea.append("\nAltura: " + unCilindro.obtenerAltura()); miArea.append("\nArea: " + unCilindro.obtenerArea()); miArea.append("\nVolumen: " + unCilindro.obtenerVolumen()); JOptionPane.showMessageDialog(null, miScroll); System.exit(0); }
32
import javax.swing.*; public class UsoCilindro { public static void main(String a[]) { JTextArea miArea=new JTextArea(10,25); JScrollPane miScroll=new JScrollPane(miArea); Cilindro unCilindro=new Cilindro(1.0, 5.0); miArea.append("Datos del cilindro"); miArea.append("\nRadio de la base: " + unCilindro.obtenerRadio()); miArea.append("\nAltura: " + unCilindro.obtenerAltura()); miArea.append("\nArea: " + unCilindro.obtenerArea()); miArea.append("\nVolumen: " + unCilindro.obtenerVolumen()); JOptionPane.showMessageDialog(null, miScroll); System.exit(0); } } Método heredado, no fue creado en la Clase Cilindro, se usa como si hiciera parte de esa clase
33
import javax.swing.*; public class UsoCilindro { public static void main(String a[]) { JTextArea miArea=new JTextArea(10,25); JScrollPane miScroll=new JScrollPane(miArea); Cilindro unCilindro=new Cilindro(1.0, 5.0); miArea.append("Datos del cilindro"); miArea.append("\nRadio de la base: " + unCilindro.obtenerRadio()); miArea.append("\nAltura: " + unCilindro.obtenerAltura()); miArea.append("\nArea: " + unCilindro.obtenerArea()); miArea.append("\nVolumen: " + unCilindro.obtenerVolumen()); JOptionPane.showMessageDialog(null, miScroll); System.exit(0); } } Método sobrescrito
34
import javax.swing.*; public class UsoCilindro { public static void main(String a[]) { JTextArea miArea=new JTextArea(10,25); JScrollPane miScroll=new JScrollPane(miArea); Cilindro unCilindro=new Cilindro(1.0, 5.0); miArea.append("Datos del cilindro"); miArea.append("\nRadio de la base: " + unCilindro.obtenerRadio()); miArea.append("\nAltura: " + unCilindro.obtenerAltura()); miArea.append("\nArea: " + unCilindro.obtenerArea()); miArea.append("\nVolumen: " + unCilindro.obtenerVolumen()); JOptionPane.showMessageDialog(null, miScroll); System.exit(0); } } Método sobrescrito Cilindro-Circulo-UsoCilindro
35
public class Cilindro1 extends Circulo { private double altura; public Cilindro1(double r, double a) { super(r); altura=a; } public double obtenerAltura() { return altura; } public double obtenerRadio() { return radio; } public double obtenerArea() { return obtenerPerimetro()*altura + 2*super.obtenerArea(); }
36
public class Cilindro1 extends Circulo { private double altura; public Cilindro1(double r, double a) { super(r); altura=a; } public double obtenerAltura() { return altura; } public double obtenerRadio() { return radio; } public double obtenerArea() { return obtenerPerimetro()*altura + 2*super.obtenerArea(); } radio es un atributo privado en Circulo, solo se puede acceder a través de métodos public
37
public class Cilindro1 extends Circulo { private double altura; public Cilindro1(double r, double a) { super(r); altura=a; } public double obtenerAltura() { return altura; } public double obtenerRadio() { return radio; } public double obtenerArea() { return obtenerPerimetro()*altura + 2*super.obtenerArea(); } Genera error de compilación Cilindro1-Circulo
38
Problema: considere la siguiente jerarquía de clases Herencia ClaseA private int x; protected int y; ClaseA(int x, int y) obtenerX() obtenerY() ClaseB private int z; ClaseB(int x, int y, int z) mostrarY()
39
public class ClaseA{ private int x; protected int y; public ClaseA(int x, int y){ this.x=x; this.y=y; } public double obtenerX(){ return x; } public double obtenerY(){ return y; }
40
public class ClaseA{ private int x; protected int y; public ClaseA(int x, int y){ this.x=x; this.y=y; } public double obtenerX(){ return x; } public double obtenerY(){ return y; } import javax.swing.*; public class ClaseB extends ClaseA{ private int z; public ClaseB(int x, int y, int z){ super(x,y); this.z=z; } public void mostrarY(){ JOptionPane.showMessageDialog(null, " El valor del atributo protected Y es: " + y ); } } ¿Se genera un error de compilación?
41
public class ClaseA{ private int x; protected int y; public ClaseA(int x, int y){ this.x=x; this.y=y; } public double obtenerX(){ return x; } public double obtenerY(){ return y; } import javax.swing.*; public class ClaseB extends ClaseA{ private int z; public ClaseB(int x, int y, int z){ super(x,y); this.z=z; } public void mostrarY(){ JOptionPane.showMessageDialog(null, " El valor del atributo protected Y es: " + y ); } ¿Se genera un error de compilación? No, ver ClaseA, ClaseB, UsoB
42
public class ClaseA{ private int x; protected int y; public ClaseA(int x, int y){ this.x=x; this.y=y; } public double obtenerX(){ return x; } public double obtenerY(){ return y; } import javax.swing.*; public class ClaseB extends ClaseA{ private int z; public ClaseB(int x, int y, int z){ super(x,y); this.z=z; } public void mostrarX(){ JOptionPane.showMessageDialog(null, " El valor del atributo private X es: " + x ); } } ¿Se genera un error de compilación?
43
Empleado Nombre Cedula Dependencia Docente CalificacionAsignada Salario calcularSalario() Administrativo SalarioBase calcularSalario() ProfesorTiempoCo mpleto totalHorasInvestigacion calcularSalario() ProfesorHoraCatedra horasAsignadas calcularSalario() RecursosHumanos Tipo (tesorería, secretaría) calcularSalario() Mantenimiento SalonesAsignados[] HorasExtra calcularSalario() Problema: Desarrolle la siguiente jerarquía de clases en Java Herencia
44
Problema: Tenga en cuenta las siguientes especificaciones Dependencia indica la escuela a la que pertenece (EISC, EIEE, entre otras) calificacionAsignada es la calificación promedio que tiene cada profesor con base en las evaluaciones de los cursos que ha dictado El salario de los profesores hora cátedra se calcula considerando que por hora asignada se reconocen 150.000 al mes Para los profesores tiempo completo, se considera que si el nivel estudio es pregrado se tiene un salario base de 1600000, si es de maestría, 2000000 y doctorado 4000000. Además, si tiene docencia destacada, se aumenta a este salario base 200000. Para obtener la docencia destacada su calificación debe superar la nota 4.5 Herencia
45
El salario base del personal administrativo es 700000 De acuerdo al tipo de recursos humanos, se aumenta el salario base 100000 si se es de tesorería y 70000 si es de secretaria El personal de mantenimiento tiene una lista con los nombres de los salones que tiene asignado Puede trabajar horas extra, por cada hora extra se aumenta 4000 al salario Herencia
Presentaciones similares
© 2025 SlidePlayer.es Inc.
All rights reserved.