De programación Java: la creación de una subclase

Cuando se escribe un programa orientado a objetos en Java, se empieza por pensar en los datos. Usted está escribiendo acerca de las cuentas. Entonces, ¿qué es una cuenta? Usted está escribiendo código para manejar clics de botón. Entonces, ¿qué es un botón? Usted está escribiendo un programa para enviar los cheques de nómina a los empleados. ¿Qué es un empleado?

En este ejemplo, un empleado es alguien con un nombre y un puesto de trabajo. Claro, los empleados tienen otras características, pero por ahora se adhieren a los conceptos básicos. El código en este listado define lo que significa ser un empleado.

importación estática clase java.lang.System.out pública Empleado {void Cadena jobTitle pública private String nombre-privada setName (String nameIn) {name = nameIn-} public String getName () {return nombre-} public void setJobTitle (String jobTitleIn) {jobTitle = jobTitleIn-} public String getJobTitle () {return jobTitle-} public void cutCheck (doble AmountPaid) {out.printf ("Pagar a la orden de% s", nombre) -out.printf ("(% s) *** $ ", jobTitle) -out.printf ("% ,. 2f n ", AmountPaid) -}}

En el establecimiento, una Empleado clase se define. Usted puede usar lo que se define aquí y ampliar la definición para crear nuevas clases, más especializados. Así que en esta próxima perfil, se define una nueva clase - un Empleado a tiempo completo clase.

public class FullTimeEmployee extiende Empleado {private doble weeklySalary-privada doble benefitDeduction-public void setWeeklySalary (doble weeklySalaryIn) {weeklySalary = weeklySalaryIn-} public doble getWeeklySalary () {return weeklySalary-} public void setBenefitDeduction (doble benefitDedIn) {benefitDeduction = benefitDedIn-} doble getBenefitDeduction pública () {return benefitDeduction-} doble findPaymentAmount pública () {return weeklySalary - benefitDeduction-}}

En cuanto a la oferta, se puede ver que cada instancia de la Empleado a tiempo completo clase tiene dos campos: weeklySalary y benefitDeduction. Pero son esos los únicos campos que cada Empleado a tiempo completo instancia tiene? No, no lo son.

La primera línea dice que el Empleado a tiempo completo clase extiende el vigente Empleado clase. Esto significa que además de tener una weeklySalary y un benefitDeduction, cada Empleado a tiempo completo instancia también tiene otros dos campos: nombre y Puesto de trabajo. Estos dos campos vienen de la definición de la Empleado clase, que se puede encontrar en el primer listado.

En el segundo perfil, la palabra mágica es se extiende. Cuando una clase se extiende una clase existente, la clase se extiende automáticamente hereda la funcionalidad que se define en la clase existente. Entonces el Empleado a tiempo completo clase hereda el nombre y Puesto de trabajo campos.

los Empleado a tiempo completo clase también hereda todos los métodos que se declaran en el Empleado clase - setName, getName, setJobTitle, getJobTitle, y cutCheck. los Empleado a tiempo completo clase es un subclase de El Empleado clase.

Eso significa que el Empleado clase es el superclase de El Empleado a tiempo completo clase. También puede hablar en términos de parientes de sangre. los Empleado a tiempo completo clase es el niño de El Empleado clase, y el Empleado clase es el padre de El Empleado a tiempo completo clase.

Es casi (pero no del todo) como si el Empleado a tiempo completo clase fue definido por el código en este listado. Este código es falso, pero informativo.

importación estática clase java.lang.System.out pública FullTimeEmployee {private String nombre-privada Cadena jobTitle-privada doble weeklySalary-privada doble benefitDeduction-public void setName (String nameIn) {name = nameIn-} public String getName () {return nombre-} public void setJobTitle (String jobTitleIn) {jobTitle = jobTitleIn-} public String getJobTitle () {return jobTitle-} public void setWeeklySalary (doble weeklySalaryIn) {weeklySalary = weeklySalaryIn-} public doble getWeeklySalary () {return weeklySalary-} public void setBenefitDeduction (doble benefitDedIn) {benefitDeduction = benefitDedIn-} doble getBenefitDeduction pública () {return benefitDeduction-} doble findPaymentAmount pública () {return weeklySalary - benefitDeduction-} public void cutCheck (doble AmountPaid) {out.printf ("Páguese a la orden de% s ", nombre) -out.printf (" (% s) *** $ ", jobTitle) -out.printf ("% ,. 2f n ", AmountPaid) -}}

¿Por qué este listado de código falso? Bueno, la principal diferencia entre este anuncio y la situación de herencia en los listados anteriores es la siguiente: Una clase de niño no puede hacer referencia directamente a los campos privados de su clase padre. Para hacer cualquier cosa con los campos privados de la clase de los padres, la clase niño tiene que llamar a métodos de acceso de la clase padre.

De vuelta en el segundo perfil, llamando setName (" Rufus ") sería legal, pero el código name = " Rufus " no lo sería. Si usted cree todo lo que lee en el último establecimiento, se podría pensar que el código en el Empleado a tiempo completo clase puede hacer name = " Rufus ". Bueno, no puedo.

No es necesario el Employee.java presentar en su disco duro para escribir código que amplía el Empleado clase. Todo lo que necesita es el archivo Employee.class.




» » » » De programación Java: la creación de una subclase