• No se han encontrado resultados

La siguiente tabla resume los niveles de acceso permitidos por cada palabra clave:

Especificación clase subclase paquete todos

Private X

protected X X X

Public X X X X

package X X

La primera columna indica que una clase tiene acceso a todos los miembros definidos en élla. La segunda columna indica cuando una subclase de una clase (independientemente se encuentren en el mismo paquete) tiene acceso a los miembros definidos en la clase. La tercera columna indica cuando una clase perteneciente al mismo paquete de una clase (independientemente de la relación de jerarquía ) tiene acceso a los miembros definidos en la clase. La cuarta columna indica los miembros a los cuales tienen acceso todas las clases.

MIEMBROS PRIVADOS:

private es el modo de acceso más restringido. Un miembro private es sólo accesible en la clase donde se declara.

Este modo de acceso debe se utilizado sólo cuando se desee que un miembro sea accesado únicamente por miembros de la clase.

class objPriv {

private int datPriv; private void metPriv() {}; }

Objetos de la clase objPriv pueden referirse a los miembros privados, en cambio objetos de otra clase no pueden accederlos.

MIEMBROS PROTEGIDOS:

protected es el siguiente modo de acceso en cuanto a restriciones. Un miembro protected es accesible en la clase

donde se declara, en las subclases de esta clase y en las clases pertenecientes al mismo paquete de la clase. Este modo de acceso debe se utilizado sólo cuando se desee que un miembro sea accesado únicamente por clases pertenecientes a la jerarquía de herencia o clases en el mismo paquete.

class objProt {

protected int datProt; protected void metProt() {}; }

Objetos de la clase objProt pueden referirse a los miembros protected, así como las otras clases en el mismo paquete o las clases que heredan de objProd. Desde el punto de vista coloquial es como si fueran secretos que sólo debe conocer la familia y un grupo de amigos seleccionados.

MIEMBROS PÚBLICOS:

public es modo de acceso menos protegido. Un miembro public es accesible en cualquier clase de la aplicación.

Este mode de acceso debe se utilizado sólo cuando se desee que un miembro sea accesado por toda la aplicación. La mejor utilización es para el caso de la implementación de una librería con funciones públicas. Utilizando los principios de orientación por objetos, los campos de datos no deberían declararse como públicos.

class objPub {

public int datPub; public void metPub() {}; }

MIEMBROS PACKAGE:

package es modo de acceso por defecto. Si no se especifica protección, Java asume que es package. Este modo

de acceso permite total acceso entre miembros del mismo paquete. Es similar a los tipos de acceso friend disponibles en otros lenguajes de programación.

class objPac {

package int datPac; // se puede omitir la palabra clave package package void metPac() {};

}

LECCION 37 Herencia

Herencia permite en Programación Orientada por Objetos extender la definición de una clase, realizar especialización sobre algo ya existente. Si funcionalidad extra es requerida, se puede crear una nueva clase que

contenga esta funcionalidad y a su vez herede funcionalidad ya existente. La clase nueva es llamada clase hija o

clase derivada y la clase existente es llamada padre o base. En ocasiones, el término “subclase” o “hereda”

es empleado para describir la acción de extender una clase. También el término "superclase" es empleado para referirse a la clase base. Herencia múltiple (herencia de varias clases simultáneamente) no es permitida en

Java.

Sintácticamente, se emplea la palabra clave extends para definir herencia.

En el siguiente ejemplo se define la clase Gerente heredando de la clase Empleado

class Empleado { ...

};

class Gerente extends Empleado { ...

}

Una subclase es una clase que extiende a otra clase. Una subclase hereda el estado y el comportamiento de todos sus ancestros, a menos que se declaren privados o a nivel de paquetes los miembros en los ancestros. La relación de herencia es una relación jerárquica.

 

Nota: Los constructores no son considerados como miembros y no son heredados por las clases derivadas. Si una

clase ancestro posee un constructor, obligatoriamente un constructor con la misma firma debe ser codificado en la clase hija.

La palabra clave super es utilizada cuando se quiere ejecutar dentro de una clase hija un método de un ancestro con la misma firma. A continuación se muestra un ejemplo.

class Empleado { ....

double protected calcularSueldo() { ...

} };

class Gerente extends Empleado { ...

double proteceted calcularSueldo() { ...

super.calcularSueldo(); // ejecuta el método de la clase // padre (Empleado)

} }

Java provee por defecto la clase base Object, cuando se crea una clase a menos de especificarse lo contrario ésta hereda de la clase base Object

La siguiente lista indica las reglas de herencia de los miembros en las subclases:  

· Una subclase hereda todos los miembros de la superclase declarados como public o

protected.  

· Si los miembros de las superclases son declarados package (o no se especifica tipo de acceso), son herededos por la subclase si ésta se encuentra en el mismo paquete.   · Si existe un miembro en la subclase con el mismo nombre de un miembro en la

supercalse, este no es heredado. En el caso de un miembro de datos este es ocultado (tapado), en el caso de un método ese es "override".  

LECCION 38 Polimorfismo: Sobrecarga, Sobreescritura, coerción de tipos

El polimorfismo en una característica básica de la P.O.O que permite que elementos con el mismo nombre tengan comportamiento diferente dependiendo de su contexto.

Existen dos maneras de implementar el polimorfismo en Java:

La sobrecarga.

La sobreescritura.

La sobrecarga (overloading) permite añadir nuevas versiones de métodos existentes cuando la lista de parámetros (signatura) es diferente. La sobreescritura (overriding) permite en la subclase (clase derivada) reemplazar completamente la implementación del método en la clase base con un método que tiene la misma “signatura”, pero la decisión del método a utilizar se posterga hasta el tiempo de la ejecución.

En el caso de la sobrecarga, se conoce cual función ejecutar bien sea por el número de los parámetros y el tipo de los parámetros (la signatura decide). En el caso de la sobreescritura se siguen las reglas para el manejo de

métodos virtuales (este término es utilizado en otros lenguajes de programación como C++), estas

reglas establecen que en tiempo de ejecución dependiendo del tipo de la referencia se ejecuta el método correspondiente.

class Empleado { ....

double protected calcularSueldo() { ...

} };

class Gerente extends Empleado { ...

double protected calcularSueldo() { // sobreescritura ...

super.calcularSueldo(); // ejecuta el método de la clase

// padre (Empleado) }

double protected calcularSueldo(int nanos) { //sobrecarga

...

super.calcularSueldo(); // ejecuta el método de la clase // padre (Empleado) .... } } .... Empleado e; e = new Gerente();

e.calcularSueldo(); // ejecuta el de gerente

// resuelve a tiempo de ejecución // según sea el caso de la referencia e = new Empleado();

e.calcularSueldo; // ejecuta el de empleado