Video: 74. Programación en Java || POO || Herencia en POO 2024
Cuando escribe un programa orientado a objetos en Java, comienza pensando en los datos. Estás escribiendo sobre cuentas. Entonces, ¿qué es una cuenta? Está escribiendo código para manejar clics de botón. Entonces, ¿qué es un botón? Está escribiendo un programa para enviar cheques de nómina a los empleados. ¿Qué es un empleado?
En este ejemplo, un empleado es alguien con un nombre y un título de trabajo. Claro, los empleados tienen otras características, pero por ahora se adhieren a lo básico. El código en este listado define lo que significa ser un empleado.
import static java. lang. Sistema. fuera; public class Employee {private String name; private String jobTitle; public void setName (String nameIn) {name = nameIn;} public String getName () {return name;} public void setJobTitle (String jobTitleIn) {jobTitle = jobTitleIn;} public String getJobTitle () {return jobTitle;} public void cutCheck (doble amountPaid) {out printf ("Pagar al orden de% s", nombre); fuera. printf ("(% s) *** $", jobTitle); fuera. printf ("%,.2fn", amountPaid);}}
En la lista, se define una clase Employee. Puede usar lo que defina aquí y ampliar la definición para crear clases nuevas y más especializadas. Entonces en esta próxima lista, usted define una nueva clase: una clase FullTimeEmployee.
public class FullTimeEmployee extends Employee {private double weeklySalary; doble beneficio privadoDeducción; public void setWeeklySalary (doble semanalSalaryIn) {weeklySalary = weeklySalaryIn;} public double getWeeklySalary () {return weeklySalary;} public void setBenefitDeduction (double benefitDedIn) {benefitDeduction = benefitDedIn;} public double getBenefitDeduction () {return benefitDeduction;} public double findPaymentAmount () {return weeklySalary - benefitDeduction;}}
Al mirar el listado, puede ver que cada instancia de la clase FullTimeEmployee tiene dos campos: weeklySalary y benefitDeduction. Pero, ¿son esos los únicos campos que tiene cada instancia de FullTimeEmployee? No, no lo son.
La primera línea dice que la clase FullTimeEmployee amplía la clase Employee existente. Esto significa que, además de tener un semanalSalary y un beneficioDeducción, cada instancia de FullTimeEmployee también tiene otros dos campos: name y jobTitle. Estos dos campos provienen de la definición de la clase Empleado, que puede encontrar en la primera lista.
En el segundo listado, la palabra mágica se extiende . Cuando una clase amplía una clase existente, la clase extendida hereda automáticamente la funcionalidad definida en la clase existente.Por lo tanto, la clase FullTimeEmployee hereda los campos name y jobTitle.
La clase FullTimeEmployee también hereda todos los métodos que se declaran en la clase Employee: setName, getName, setJobTitle, getJobTitle y cutCheck. La clase FullTimeEmployee es una subclase de la clase Employee.
Eso significa que la clase Employee es la superclase de la clase FullTimeEmployee. También puede hablar en términos de parientes consanguíneos. La clase FullTimeEmployee es el hijo de la clase Employee, y la clase Employee es la parent de la clase FullTimeEmployee.
Casi (pero no del todo) como si la clase FullTimeEmployee estuviera definida por el código en esta lista. Este código es falso, pero informativo.
import java estático. lang. Sistema. fuera; public class FullTimeEmployee {private String name; private String jobTitle; doble semanal privadoSalary; doble beneficio privadoDeducción; public void setName (String nameIn) {name = nameIn;} public String getName () {return name;} public void setJobTitle (String jobTitleIn) {jobTitle = jobTitleIn;} public String getJobTitle () {return jobTitle;} public void setWeeklySalary (doble semanalSalaryIn) {weeklySalary = weeklySalaryIn;} public double getWeeklySalary () {return weeklySalary;} public void setBenefitDeduction (double benefitDedIn) {benefitDeduction = benefitDedIn;} public double getBenefitDeduction () {return benefitDeduction;} public double findPaymentAmount () {return weeklySalary - benefitDeduction;} público void cutCheck (double amountPaid) {out. printf ("Pagar al orden de% s", nombre); fuera. printf ("(% s) *** $", jobTitle); fuera. printf ("%,.2fn", amountPaid);}}
¿Por qué este código es falso? Bueno, la principal diferencia entre esta lista y la situación de herencia en las listas anteriores es la siguiente: una clase hija no puede hacer referencia directa a los campos privados de su clase padre. Para hacer cualquier cosa con los campos privados de la clase padre, la clase hija tiene que llamar a los métodos de acceso de la clase padre.
De vuelta en la segunda lista, llamar a setName ("Rufus") sería legal, pero el nombre del código = "Rufus" no lo sería. Si crees todo lo que lees en el último listado, pensarías que el código en la clase FullTimeEmployee puede hacer name = "Rufus". Bueno, no puede.
No necesita el empleado. archivo java en su disco duro para escribir código que amplíe la clase Empleado. Todo lo que necesitas es el archivo Employee. clase.