Вы находитесь на странице: 1из 66

UNIVERSIDAD ESTATAL DEL SUR DE

MANAB
UNIDAD ACADMICA DE CIENCIAS TECNICAS
CARRERA DE INGENIERA EN SISTEMAS COMPUTACIONALES

MATERIA:
Sistemas Expertos

TEMA:
Unidad 4: Mtodos
Generalidades de los mtodos
Mtodos que no devuelven valores
Mtodos que devuelven valores
Arreglos tipos
Operaciones con arreglos (Orden, recorrido)
Declaracin de objetos y constructores
Herencia, subclase - superclase
Demostracin de comportamiento polimrfico

ESTUDIANTE:
VARGAS AVILEZ EDDY GERONIMO

TUTOR:
ING. Jos Paladines Moran
MTODOS EN JAVA

MTODOS PROCEDIMIENTO (VOID) Y FUNCIN (RETURN)


Volvamos sobre los objetos taxi creados y que deben aparecer en el banco
de objetos en la parte inferior izquierda de la pantalla del entorno de
desarrollo. Si pulsamos con botn derecho del ratn sobre ellos se nos
despliegan los mtodos (operaciones) disponibles para cada objeto.
Pulsa sobre el taxi1 y elige la opcin String getDistrito.

La ejecucin de un mtodo se denomina habitualmente invocacin del


mtodo o llamada al mtodo. Los mtodos disponibles los define la
clase, pero se invocan sobre cada objeto en particular. Al invocar el mtodo
getDistrito() se nos abre una ventana de BlueJ denominada Method Result
donde nos indica: returned String Desconocido. Le hemos pedido al objeto
que nos diga cul es su distrito y nos devuelve Desconocido. La razn
para ello es que en el constructor de la clase incluimos una lnea de
inicializacin de distrito para todo objeto de tipo Taxi con el valor
Desconocido. Si en vez de ese valor hubisemos establecido otro, ese
sera el que ahora obtendramos.

Cierra esa ventana y repite el proceso eligiendo ahora la opcin void


setDistrito (String valorDistrito). En el recuadro donde solicita el distrito
escribe Oeste. No olvides incluir las comillas obligadas por tratarse de un
String. Seguidamente, vuelve a invocar el mtodo getDistrito y comprueba
el resultado obtenido.

Los mtodos que hemos definido en la clase Taxi podemos clasificarlos de la


siguiente manera:
Mtodos tipo funcin: son mtodos que nos devuelven algo. Un mtodo
es tipo funcin si comienza con un tipo (no consideramos ahora la palabra
clave public). Por ejemplo String getDistrito() comienza con el tipo String lo
que significa que nos devuelve una cadena de caracteres, mientras que int
getTipoMotor() comienza con el tipo int lo que significa que nos devuelve un
entero. Tener en cuenta que un mtodo tipo funcin devuelve solo un dato u
objeto como resultado, no varios. La devolucin del resultado se expresa
con la palabra clave return seguida del dato u objeto a devolver, por
ejemplo return tipoMotor;.

La sentencia return implica que termina la

ejecucin del cdigo en el mtodo y estar tpicamente en la lnea final. De


existir una lnea por detrs de una sentencia return, nunca llegara a
ejecutarse (tendremos que matizar esto porque el uso de condicionales nos
permitir tener ms de un return en un mtodo). De forma genrica:

/* Ejemplo - aprenderaprogramar.com */
//Comentario descriptivo de qu hace el mtodo
public tipoValorDevuelto nombreDelMtodo (tipo parmetro1,
tipo parmetro2) {
Cdigo del mtodo
return ResultadoQueDevuelveElMtodo;
}
Mtodos

tipo

procedimiento:

son

mtodos

que

realizan

ciertas

operaciones sin devolver un valor u objeto concreto. Un mtodo es tipo


procedimiento si comienza con la palabra clave void (que traducido del
ingls viene siendo vaco o nulo). En estos casos podemos decir que el
tipo de retorno es void. De forma genrica:

/* Ejemplo - aprenderaprogramar.com */
//Comentario descriptivo de qu hace el mtodo
public void nombreDelMtodo (tipo parmetro1, tipo
parmetro2) {
Cdigo del mtodo
}
En general un mtodo con tipo de retorno void no llevar sentencia return,
aunque en Java se permite que un mtodo de este tipo incluya la sentencia
return;. Si ocurre esto, la sentencia da lugar a que el mtodo finalice en ese
punto sin ejecutar ninguna lnea ms de cdigo. Solo tiene sentido su uso
asociado a que se cumplan ciertas condiciones.

Puede un mtodo ser al mismo tiempo funcin y procedimiento?


Formalmente debemos evitarlo. Podramos tratar de agrupar operaciones,
pero es una situacin que trataremos de evitar. Nos plantearemos como
objetivo que todo mtodo tipo funcin se centre en devolvernos aquello que
nos interesa sin realizar otros procesos. Igualmente buscaremos que todo
procedimiento realice unos procesos concretos y no varios. Cada mtodo
debe realizar una tarea concreta, especfica y bien definida. Un mtodo no
debe ocuparse de dos tareas.
EJERCICIO
Considera ests desarrollando un programa Java donde necesitas trabajar
con objetos de tipo DiscoMusical. Define una clase DiscoMusical anloga a la
que hemos visto para taxis, pero en este caso considerando los siguientes
atributos de clase: titulo (String), autor (String), aoEdicion (int), formato
(String), digital (boolean). Define un constructor y los mtodos para poder
establecer y obtener los valores de los atributos. Compila el cdigo para
comprobar que no presenta errores. Crea un objeto y comprueba sus
mtodos como hemos hecho con los objetos

Taxi.

MTODOS EN JAVA CON Y SIN PARMETROS


Al igual que hicimos con distrito, contina invocando los mtodos del objeto
taxi1 para establecer sus valores de matrcula a BFG-7452 y tipo de motor
a 2. Los mtodos que hemos definido en la clase Taxi podemos clasificarlos
de otra manera:
Mtodos que solicitan parmetros: son mtodos que nos piden algo
(uno o varios datos u objetos). Es decir, el mtodo para ejecutarse necesita
que se le enve un parmetro de un tipo concreto. Los mtodos que solicitan
parmetros se identifican porque en los parntesis finales incluyen uno o
varios trminos, por ejemplo (String valorMatricula) nos indica que el
mtodo requiere un parmetro de tipo String. Fjate que en este caso el
parmetro

es

un

objeto

tipo

String.

En

cambio

la

expresin

(int

valorTipoMotor) nos indica que el parmetro es un tipo primitivo int. Un


mtodo podra requerir varios parmetros para lo cual se indican separados
por comas. Por ejemplo public int costeVivienda (int superficiem2, String
zonaCiudad, int calidadesMedias).

Mtodos sin parmetros: son mtodos que no piden ningn dato u objeto
para ejecutarse. Un mtodo sin parmetros se identifica porque sus
parntesis finales estn vacos. Estos mtodos no necesitan recibir
informacin para ejecutarse.
Una cuestin importante en los mtodos con parmetros es el tipo
requerido. Prueba a introducir un dato errneo. Por ejemplo, introduce el
texto gasolina cuando te pida el tipo de motor de un taxi. El resultado es
que se produce un error porque el tipo recibido no coincide con el tipo
esperado. El correcto manejo de tipos es un aspecto importante en la mayor
parte de lenguajes de programacin, incluido Java, y ser algo a lo que
debamos prestar especial atencin siempre que estemos desarrollando
cdigo.
Los constructores funcionan en buena medida de forma similar a los
mtodos y tambin podemos definir constructores con parmetros y
constructores sin parmetros. El sentido de que un constructor pida uno o
varios parmetros es tener en cuenta esos parmetros a la hora de crear un
objeto.
MTODOS CONSULTORES (GET) Y MODIFICADORES (SET)
Continuamos con el uso de mtodos en Java. Prueba a establecer distintos
valores de matrcula, distrito y tipo de motor para los diferentes objetos
Taxi. Prueba tambin a, una vez establecidos unos valores para un objeto,
volver a cambiarlos por otros valores distintos.
Hay an otra manera de clasificar los mtodos que hemos definido para la
clase Taxi:
Mtodos modificadores: llamamos mtodos modificadores a aquellos
mtodos que dan lugar a un cambio en el valor de uno o varios de los
atributos del objeto.

Mtodos consultores u observadores: son mtodos que devuelven


informacin sobre el contenido de los atributos del objeto sin modificar los
valores de estos atributos.
Cuando se crea una clase es frecuente que lo primero que se haga sea
establecer mtodos para consultar (de ah su denominacin de consultores)
sus

atributos

estos

mtodos

suelen

ir

precedidos

del

prefijo

get (getMatricula, getDistrito, etc.) por lo que muchas veces se alude


coloquialmente a ellos como mtodos get o getters.
Se suele proceder de igual forma con mtodos que permitan establecer los
valores de los atributos. Estos mtodos suelen ir precedidos del prefijo
set (setMatricula, setDistrito, etc.) por lo que muchas veces se alude
coloquialmente a ellos como mtodos set o setters. Los mtodos set son
un tipo de mtodos modificadores, porque cambian el valor de los atributos
de un objeto.
Puede un mtodo ser al mismo tiempo modificador y consultor? Es
posible, pero es una situacin que trataremos de evitar. Nos plantearemos
como objetivo que cada mtodo haga una cosa especfica y no varias al
mismo tiempo.

ESTADO DE UN OBJETO.
Hemos comprobado que un objeto tiene unos atributos. Adems, si tenemos
mtodos disponibles para ello, podemos cambiar varias veces el valor de
estos atributos. Por ejemplo, al objeto taxi1 le podemos establecer
inicialmente distrito Oeste, luego distrito Norte, Sur, etc.
Llamamos estado de un objeto al conjunto de valores de los atributos del
objeto en un momento dado. Sobre el objeto taxi1, pulsa botn derecho y
elige la opcin Inspect.

El resultado es que se nos abre una ventana que se denomina Inspector


de objetos y que refleja su estado. En este caso, nos indica que el valor de
sus atributos es BFG-7452 para la matrcula del taxi, Distrito Oeste para
el distrito y 2 para el tipo de motor. Prueba a modificar el estado del objeto
taxi1 utilizando alguno de sus mtodos sin cerrar la ventana de inspeccin.
Comprobars que los datos se actualizan automticamente a medida que
vamos realizando cambios. Prueba a inspeccionar el estado de los distintos
objetos Taxi que hayas creado.

PARMETROS FORMALES Y PARMETROS.


Hemos visto que un mtodo (o constructor) puede requerir un parmetro,
con un tipo y nombre concretos. Por ejemplo tipo String y nombre del
parmetro valorDistrito. A su vez valorDistrito podra ir tomando distintos
valores a lo largo de una ejecucin del mtodo, por ejemplo Norte,
Oeste, Sur, etc.
Vamos a definir dos conceptos relacionados con los parmetros:

Parmetro formal: es el nombre de un parmetro de un constructor o


mtodo tal y como se define en su cabecera, por ejemplo valorDistrito es un
parmetro formal.

Parmetro actual: es el valor concreto que tiene un parmetro en un


momento dado.
Prueba a escribir y compilar el siguiente cdigo:

/* Ejemplo - aprenderaprogramar.com */
//Esta clase es una prueba
public class miPrueba {
public String resultado (String dimeUnString) {
System.out.println ("dimeUnString inicialmente vale " +
dimeUnString);
dimeUnString = dimeUnString + " recibido";
System.out.println ("dimeUnString ahora vale " +
dimeUnString);
return "El mtodo devuelve " + dimeUnString;
}
}

Ahora crea un objeto de tipo miPrueba y ejecuta el mtodo introduciendo


una cadena, por ejemplo esperanza. El resultado ser algo similar a esto:

El parmetro formal dimeUnString es de tipo String y inicialmente toma el


valor que le hayamos pasado al constructor cuando creamos el objeto.
Luego su valor actual pasa a ser el valor pasado al constructor + recibido.
Finalmente el mtodo nos devuelve una cadena de la que forma parte el
parmetro.
Conclusin interesante: los parmetros de mtodos o constructores tambin
almacenan valores que pueden ir cambiando. Por eso diremos que tambin
son variables al igual que los campos, aunque conceptualmente sean cosas
distintas.
Ten en cuenta una cosa: un campo es una variable que est de forma
permanente asociada a un objeto y cuyo mbito (lugares donde podemos
usarla) es toda la clase. Su tiempo de vida es indefinido mientras exista el
objeto al que est ligado. En cambio un parmetro formal tiene un mbito
limitado al mtodo o constructor y tiempo de vida limitado al tiempo
durante el cual se ejecuta el mtodo o constructor. En este sentido, decimos
que un parmetro es un tipo de variable local (solo podemos usarla dentro
del mtodo) y temporal (se crea al comenzar la ejecucin del mtodo y se
destruye al terminar su ejecucin).

Para evitar confusiones, en general trataremos de evitar modificar el


contenido de un parmetro dentro del cdigo de un mtodo.

CONCEPTO Y FILOSOFA DE MTODOS Y CLASES EN JAVA


Hemos visto la forma habitual de organizar una clase en Java. Trataremos
ahora de reflexionar sobre por qu se hacen as las cosas. Vamos a
explicarlo sobre un esquema grfico: lee el siguiente texto al mismo tiempo
que miras el esquema Funcionamiento de mtodos y clases en Java
incluido a continuacin.
A un objeto le llegan muchas solicitudes, que hemos representado como
personas en una cola frente a un control de acceso. El control de acceso
representa que todo lo que se pretenda hacer est sometido a supervisin:
cualquiera no puede dar rdenes y quien puede dar rdenes no puede hacer
lo que quiera. Por ejemplo, puede haber una solicitud para establecer que la
ciudad del objeto pase a ser Mrida. El control de acceso verifica si es
posible tal accin, y al no ser posible ya que no se ha definido ningn
mtodo que permita modificar el atributo ciudad, la peticin es rechazada.
Puede haber otra solicitud que pida informacin al objeto sobre qu valor
tiene su atributo ciudad. El control de acceso comprueba que no existe un
mtodo que permita tal accin y la peticin es rechazada.

Esquema del funcionamiento de mtodos y clases en Java. Puede


haber una solicitud que pida informacin al objeto sobre su atributo distrito:

es una operacin permitida y se entrega la informacin (el estado del objeto


no cambia).
Dentro del objeto el trabajo es ordenado. Hay mtodos especficamente
encargados de preparar informacin para servirla (tipo funcin). Otros
mtodos se encargan de hacer manipulaciones en el objeto.
En resumen, la clase define qu se puede hacer y qu no se puede
hacer. El objeto funciona como una entidad que trabaja de forma ordenada
y especializada. Este planteamiento difiere del que exista en los lenguajes
de programacin primigenios, donde se podan hacer modificaciones a
variables desde cualquier lugar y sin control. Esto en s no es un problema,
el problema vena a posteriori cuando los programadores hacan un mal uso
de esa libertad.
En la programacin actual, se trabaja en equipos en algunos casos de
cientos o miles de personas que desarrollan cdigo por separado. Para
evitar que se hagan cosas inadecuadas, se utilizan mecanismos de control
que favorecen que la programacin sea de calidad. En Java no existe un
control de acceso tal y como lo hemos representado en nuestro esquema,
pero s existen distintos mecanismos de control como la declaracin del
mbito y accesibilidad a las variables y clases (public, private, protected,
etc.) y la obligacin de uso de mtodos para realizar operaciones sobre
objetos impidiendo su manipulacin directa.

Que son los mtodos y como utilizarlos en java.


Java como todo lenguaje de programacin orientado a objetos utiliza los
llamados metodos. Acontinuacin veremos como se crea un metodo y como
se

utilizan.

Se podria decir que existen 2 grandes tipos de metodos, el primer tipo de


metodo son metodos que realizan procesos, puedes realizar cualquier
operacin con ellos, sin embargo el proposito es manipular variables
existentes. El segundo tipo de metodos son los que realizan un proceso o
calculo, y calculan una variable especifica, un ejemplo podria ser un metodo
para obtener el valor de una multiplicacin.

Estructura de un metodo.

Los metodos en java pueden tener parametros, es decir, que un metodo


puede utilizar variables predefinidas para ser utilizadas en sus procesos,
Veamos un ejemplo de como hacer un metodo en el siguiente ejemplo
En este ejemplo vemos un programa normal en el cual se ejecuta un ciclo
while que imprime numeros del 0 al 7, pero es posible hacerlo utilizando un
metodo?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23

package ciclos;
/**
*
* @author xymind
*/
public class Main {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
int x=0;
while(x!=7)
{
System.out.println("X vale: "+x);
x++;
}
}
}

Ahora utilizaremos este mismo programa pero el ciclo se ejecutara


en un metodo:
01
02
03
04
05
06
07
08

package ciclos;
/**
*
* @author xymind
*/
public class Main {

09 /**
10 * @param args the command line arguments
11
*/
12
public static void main(String[] args) {
13
14 iniciarCiclo();//aqui estamos ejecutando el metodo escrito en
15 //la parte de abajo, se puede utilizar mas de 1 vez
16 }
17
18
/*Comienza el metodo
19 Este metodo no regresa valores, es un metodo que unicamente
20 realiza un procedimiento, por lo que se declara como "void" seguido del
21
nombre que tendra el metodo*/
22
public void iniciarCiclo(){
23
24
int x=0;
25
while(x!=7)
26
{
27
System.out.println("X vale: "+x);
28
x++;
29
30
}
31
}
32
33
}
Los dos anteriores programas hacen exactamente lo mismo a diferencia de
que el segundo programa esta utilizando un metodo.
En este ultimo ejemplo se mostrara un metodo que regrese un valor, estos
metodos

se

declaran

diferente

siempre

deben

terminar

con la palabra return var; donde var es una variable cualquiera del
mismo tipo del metodo. Ejemplo:

Declaramos el metodo:
..//
1
2
3
4

public int obtenerValor(){


int x=10;
return x;
}

//..
Notese que se utiliza int en lugar de void, lo cual indica que se regresara

una variable del tipo integer o numerico, por lo que dentro del metodo se
declara int x=10; que es precisamente un valor numerico, y se regresa el
valor de x, es decir 10. Finalmente el metodo puede ser usado para obtener
el valor de 10 del siguiente modo. //..codigo//
1
int variable;
2
3 variable = obtenerValor(); //estamos diciendo que variable vale ahora 10.
//..mas codigo//

GENERALIDADES DE LOS MTODOS


Que es java. "Un lenguaje simple. Orientado al objeto, distribuido,
interpretado, slido, seguro, de arquitectura neutral, portable, de lato
desempeo, de multihilos y dinmico"

Simple. Basado en el lenguaje C++ pero donde se eliminan muchas de


las caractersticas OOP que se utilizan espordicamente y que creaban
frecuentes problemas a los programadores. Esta eliminacin de causas
de error y problemas de mantenimiento facilita y reduce el coste del
desarrollo de software.
Java no da soporte a struct, union y pointer
Java no ofrece typedef ni #define
No permite la sobrecarga de operadores.
No ofrece herencia mltiple.
Maneja los comandos en lnea de diferente manera que C++
Java tienen una clase String, que permite un mejor manejo que los
arrays de terminacin nula del C y C++.

Java tiene un sistema automtico de asignacin y liberacin de


memoria (recolector de basura) que mejora mucho los sistemas del
C++Orientado al objeto.
Java da buen soporte a las tcnicas de desarrollo OOP y en resumen a la
reutilizacin de componentes de software.

Distribuido.
Java se ha diseado para trabajar en ambiente de redes y contienen una
gran biblioteca de clases para la utilizacin del protocolo TCP/IP,
incluyendo HTTP y FTP. El cdigo Java se puede manipular a travs de
recursos URL con la misma facilidad que C y C++ utilizan recursos
locales (archivos).

Interpretado. El compilador Java traduce cada fichero fuente de


clases a cdigo de bytes (Bytecode), que puede ser interpretado por
todas las mquinas que den soporte a un visualizador de que funcione
con Java. Este Bytecode no es especfico de una mquina determinada,
por lo que no se compila y enlaza como en el ciclo clsico, sino que se
interpreta.

Slido. El cdigo Java no se quiebra fcilmente ante errores de


programacin. As el relaje que existe en la declaracin y manejo de
tipos en C y C++ se torna en restricciones en Java, donde no es posible
la conversin forzada (cast) de enteros en punteros y no ofrece soporte
a los punteros que permitan saltarse reglas de manejo de tipos. As en
Java no es posible escribir en reas arbitrarias de memoria ni realizar
operaciones que corrompan el cdigo. En resumen se eliminan muchas
de las posibilidades de "trucos" que ofrecan el C y C++.

Seguro. Como Java suele funcionar en ambiente de redes el tema de


seguridad debe interesar en sobremanera. Las mismas caractersticas
antes

descritas

que

evitan

la

corrupcin

de

cdigo

evitan

manipulacin. Actualmente se esta trabajando en encriptar el cdigo.

su

Arquitectura neutral. El compilador crea cdigos de byte (Bytecode)


que se enva al visualizador solicitado y se interpreta en la mquina que
posee un interprete de Java o dispone de un visualizador que funciona
con Java.

Portable. Al ser de arquitectura neutral es altamente portable, pero


esta caracterstica puede verse de otra manera: Los tipos estndares
(int, float ...) estn igualmente implementados en todas las mquinas
por lo que las operaciones aritmticas funcionaran igual en todas las
mquinas.

Alto desempeo. al ser cdigo interpretado, la ejecucin no es tan


rpida como el cdigo compilado para una plataforma particular. El
compilador Java suele ofrecer la posibilidad de compilar Bytecode en
cdigo mquina de determinadas plataformas, y segn Sun este cdigo
resultar de una eficacia similar a compilaciones de C y C++.

Multihilos. Java puede aplicarse a la realizacin de aplicaciones en las


que ocurra ms de una cosa a la vez. Java, apoyndose en un sistema
de gestin de eventos basado en el paradigma de condicin y monitores
C.A.R. permite apoyar la conducta en tiempo real e interactiva en
programas

Dinmico. Al contrario que C++ que exige se compile de nuevo la


aplicacin al cambiar una clase madre Java utiliza un sistema de
interfaces que permite aligerar esta dependencia. Como resultado, los
programas Java pueden permitir nuevos mtodos y variables en un
objeto de biblioteca sin afectar a los objetos dependientes.

Java genera. Que un programador en Java puede crear:


Applets
programas elementales incluidos en pginas HTML a travs de la
etiqueta app y que se despliega en el visualizador tras cargarse la
pgina.

Aplicaciones
programas escritos en Java y que se ejecutan de forma independiente de
los visualizadores. Esto se realiza llamando a los intrpretes Java con el
programa como opcin.

Manipuladores de protocolo. Programas que se cargan en el


visualizador e interpretan un protocolo (como pueda ser HTTP).

Manipuladores de contenido.

Un programa cargado en el

visualizador y que interpreta el contenido de determinado tipo de


ficheros.

Mtodos nativos .Mtodos que se declaran en una cierta clase Java


pero que se implementan en C.

Caractersticas generales del lenguaje. Java es sensible a


maysculas y minsculas. Por convencin los nombres de las clases
comienzan con mayscula y los mtodos y objetos con minscula.
Los comentarios en Java pueden tener varios estilos:
/* comentario */
// comentario
/** comentario extendido hasta que se encuentre */
Java ignora los comentarios y espacios en blanco. La disposicin del
cdigo es mas conveniencia de visualizacin que exigencia lexicografica.
Las sangras y mtodos de presentacin son herencia del C y C++.
Java utiliza; como separador de posiciones y {} como agrupador de
posiciones.

Los nombres de los identificadores siguen las siguientes reglas:


Un identificador no puede ser una palabra clave
Un nombre debe empezar con una letra, subrayado _ o signo $
Despus de la primera letra se puede utilizar cualquier carcter, a
excepcin de aquellos reservados para uso del lenguaje (., + ...)
La convencin de nombres a de ser coherente y aportar significancia al
contexto, as:

Emplear sustantivos para los nombres

Emplear verbos para las acciones y mtodos.

Letras maysculas iniciales para nombres de clases.

Minsculas para nombres de mtodos.

Maysculas para distinguir entre palabras en nombres


compuestos.

Lo anterior es practica en la OOP, pero el programador podr generar las


convenciones oportunas, pero con significado y valor aadido.

Una aplicacin en java.


/**
mi

primera

aplicacin

Java

@autor

jemer

@versin

1.1.0

*/
Class
Public

AplicacionEsencial
static

void

System.out.println("Hola

main

(String

{
args[])

Mundo");

}
}
Lo anterior representa el codigo de un progrma Java que se compilara
y ejecutara de la siguiente forma:
El cdigo anterior se guarda en un fichero texto cuya extensin es .java
(AplicacionEsencial.java)
Este se compila llamando a javac. El resultado de esta compilacin es un
fichero con el nombre de la clase contenida y la extensin .class
(AplicacionEsencial.class). El nombre del fichero fuente (.java podra ser
cualquiera pero dado que el resultado de la compilacin adquiere el
nombre de la clase contenida en el mismo, es buena practica el llamar al
fichero fuente con el mismo nombre.

El fichero obtenido puede ser llamado como argumento del


intrprete para su ejecucin:
$

javac

AplicacionEsencial.java

java

AplicacionEsencial.class

Hola

Mundo

$
Las partes del programa anterior son:
Comentarios: desde "/*" hasta que aparece "*/", son ignorados por el
compilador

La palabra clave class que seguida del nombre de la clase a definir y de


la llave de apertura "{" da comienzo a la definicin de la misma.
Cuerpo de la clase que contendr mtodos, operaciones y datos de la
clase. En nuestro caso solo contienen un mtodo, el que todas las
aplicaciones han de tener: main
La lnea: "Public static void main (String args[]) {" da comienzo al
metodo main, las palabras clave que anteceden al nombre indican
formas expecificas para este y su explicacin se hara a posteriori.
Despues de main se declara los parametros de este metodo (String
args[]) que en este caso conta de un array de cadenas decaracteres
cuyo nombre es args. Esta aplicacin no hace uso de estos parametros,
pero todos los metodos main han de declarar tal lista, ya que representa
la teorica linea de comandos que podria acompaar a la llamada a la
clase:
La Interfaz Collection. Una coleccin representa un grupo de objetos. Esta
interfaz permite usar colecciones donde el mximo de generalidad es
deseado.

Por

ejemplo,

por

convencin

todas

las

implementaciones

de Collection tienen un constructor que toma Collection como argumento.


Este constructor, conocido como constructor de conversin, inicializa la
nueva coleccin de elementos especificados en la coleccin, no importa la
subinterfaz o tipo implementacin de la coleccin. En otras palabras,
permite convertir el tipo de coleccin.
Supngase, que se tiene Collection<String> c, que se quiere convertir en
una List, Set u otro tipo de coleccin.
List<String> list = new ArrayList<String>(c); // Crea un ArrayList en base a
la coleccin c.

Mtodos:
Esta interfaz tiene mtodos, entre ellos:

size: que permite saber cuntos elementos existen en la coleccin.

isEmpty: verifica si la coleccin se encuentra vaca.

contains: chequea si un elemento especfico se encuentra en la


coleccin.

add: para agregar un elemento a la coleccin.

remove: para eliminar un elemento de la coleccin.

iterator: para iterar sobre la coleccin.


Iterando Colecciones.
Existen dos formas de recorrer una coleccin.

Mediante for-each

Usando iteradores

for-each. Permite atravesar la coleccin o arreglo usando un bucle for.


for(Object o: collection)

Iteradores. Un iterador es un objeto que permite recorrer una coleccin y


remover elementos de la misma selectivamente. Se obtiene un iterador de
una coleccin llamando al metodo iterator. La interfaz Iterator se muestra a
continuacin:
public interface Iterator<E> {
boolean hasNext();
E next();
void remove(); //optional
}
Los mtodos hasNext retorna true si la iteracin contiene ms elementos, y
el mtodo next retorna el siguiente elemento en la iteracin. El mtodo
remove, remueve el ltimo elemento que fue retornado por next de la

coleccin que est siendo iterada. El mtodo remove solo puede ser llamado
una vez por llamada de next y lanza una excepcin si esta regla es violada.
El siguiente mtodo realiza una eliminacin de elementos de la coleccin
static void filter(Collection<String> c) {
for (Iterator<String> it = c.iterator(); it.hasNext(); )
if (!cond(it.next()))
it.remove();
}

Operaciones

entre

colecciones

arreglos.

El

mtodo toArray provee un puento entre las colecciones y los arreglos. Las
operaciones de arreglos permiten al contenido de una coleccin ser
transformada en un arreglo. La forma ms simple sin argumentos crea un
nuevo arreglo tipo Object. La otra forma de este mtodo permite especificar
el tipo de salida que tendr el arreglo.
Suponiendo que c es de tipo Collection, la siguiente expresin enva el
contenido de est hacia un arreglo de Object cuya longitud es igual al
nmero de elementos en c.
Object[] a = c.toArray();
Ahora

suponiendo

que

contiene

solo

elementos

tipo String

(Collection<String>), la siguiente sentencia manda el contenido de c hacia


un arreglo de objetos tipo String.
String[] a = c.toArray(new String[0]);
La Interfaz Set. Es una coleccin que no permite elementos repetidos. La
interfaz Set contiene slo mtodos heredados de Collection y aumenta la
restriccin de elementos duplicados. Esta interfaz tiene un contrato con un
comportamiento ms especfico en operaciones conequals y hashCode,
permitindo a instancias de esta interfaz ser comparadas significativamente
an si el tipo de iimplementacin difiere. Dos instancias de Set son iguales
si ellas contienen los mismos elementos.

Java dispone de 3 implementaciones generales de Set: HashSet,


TreeSet y LinkedHashSet. La primera HashSet, almacena sus elementos en
una tabla Hash, es la implementacin ms eficiente. TreeSet, guardar sus
elementos en un rbol, ordenando sus elementos en base a sus valores, y
por lo tanto es ms lento que un HashSet. LinkHashSet, por otro lado es
implementada por una tabla Hash con una lista enlazada a travs de ella,
ordenando

sus

elementos

en

base

como

han

sido

insertados. LinkedHashSettiene un costo ms alto de rendimiento que


un HashSet.
Aqu tenemos un ejemplo. Supongamos que tenemos una Collection c, y
queremos crear otra coleccin la cual contenga los mismos elementos pero
todos los duplicados sean eliminados.
Collection<Type> noDuplicados = new HashSet<Type>(c);
Lo que hace esto es crear un Set, cuya definicin no permite duplicados,
inicialmente conteniendo todos los elementos en c. Usa el constructor por
defecto de Collection.

Operaciones

bsicas:

La

operacin size,

retorna

el

nmero

de

elementos en el Set, su cardinalidad. El mtodo isEmpty, hace exactamente


lo que su nombre indica, verifica si se encuentra vaca. El mtodo add,
aumenta el elemento especificado, si este no se encuentra presente y
retorna un booleano indicando si este fue o no insertado. As mismo el
mtodo remove elimina el elemento especificado del Set si est presente.
Retorna verdadero o falso si el elemento est o no presente. El
mtodo iterator retorna un Iterator sobre el Set.
Public class BuscarDuplicados {
Set<String> s = new HashSet<String>();
for (String cadena : args)
if (!s.add(a))
System.out.println("Duplicados encontrados: " + cadena);
System.out.println(s.size() + " palabras diferentes: " + s);

Ntese que el cdigo se refiere a Collection por su interfaz Set al contrario


de su implementacin HashSet. Esto es muy recomendado, debido a que
esto nos da la flexibilidad de cambiar las implementaciones simplemente
cambiando el constructor. Si alguna de las variables usada para almacenar
la coleccin o los parmetros usados para pasarlo por la implementacin
deCollection en lugar de su tipo de interfaz, todas esas variables y
parmetros tendrn que ser cambiados para poder cambiar el tipo de su
implementacin.
El tipo de implementacin de Set en el ejemplo anterior es HashSet, lo que
garantiza que los elementos estn ordenados en el Set. Si deseamos que el
programa imprima en orden alfabtico, slo cambiaramos el tipo de
implementacin de HashSet a TreeSet.

Operaciones adicionales. Supngase que s1 y s2 son Sets, y las


operaciones sobre estos:
s1.containsAll(s2) - retorna true si s2 es una sub coleccin de s1, es decir si
s1 contiene todos los elementos de s2.
s1.addAll(s2) - transforma a s1 en la unin de s1 y s2.
s1.retainAll(s2) - transforma a s1 en la interseccin de s1 y s2. La diferencia
entre s1 y s2.

MTODOS QUE NO DEVUELVEN VALORES


Un mtodo en Java es un conjunto de instrucciones definidas dentro de una
clase, que realizan una determinada tarea y a las que podemos invocar
mediante un nombre.
Algunos mtodos que hemos utilizado hasta ahora:
1.
2.
3.
4.

Math.pow()
Math.sqrt()
Character.isDigit()
System.out.println();
Cuando se llama a un mtodo, la ejecucin del programa pasa al mtodo y
cuando ste acaba, la ejecucin contina a partir del punto donde se
produjo la llamada.

Utilizando mtodos: Podemos construir programas modulares. Se consigue


la reutilizacin de cdigo. En lugar de escribir el mismo cdigo repetido
cuando se

necesite, por ejemplo para validar una fecha, se hace una

llamada al mtodo que lo realiza.

En Java un mtodo siempre pertenece a una clase.


Todo programa java tiene un mtodo llamado main. Este mtodo es el punto
de entrada al programa y tambin el punto de salida.

ESTRUCTURA GENERAL DE UN MTODO JAVA.


La estructura general de un mtodo Java es la siguiente:
[especificadores] tipoDevuelto nombreMetodo([lista parmetros]) [throws
listaExcepciones]
{
// instrucciones
[return valor;]
}
Los elementos que aparecen entre corchetes son opcionales.

Especificadores (opcional): determinan el tipo de acceso al mtodo. Se


vern en detalle ms adelante.
Tipodevuelto: indica el tipo del valor que devuelve el mtodo. En Java es
imprescindible que en la declaracin de un mtodo, se indique el tipo de
dato que ha de devolver. El dato se devuelve mediante la instruccin return.
Si el mtodo no devuelve ningn valor este tipo ser void.
Nombremetodo: es el nombre que se le da al mtodo. Para crearlo hay
que seguir las mismas normas que para crear nombres de variables.
Lista de parmetros (opcional): despus del nombre del mtodo y
siempre entre parntesis puede aparecer una lista de parmetros (tambin
llamados argumentos) separados por comas. Estos parmetros son los datos
de entrada que recibe el mtodo para operar con ellos. Un mtodo puede

recibir cero o ms argumentos. Se debe especificar para cada argumento su


tipo. Los parntesis son obligatorios aunque estn vacos.
Throws listaexcepciones (opcional): indica las excepciones que puede
generar y manipular el mtodo.
Return: se utiliza para devolver un valor. La palabra clave return va
seguida de una expresin que ser evaluada para saber el valor de retorno.
Esta expresin puede ser compleja o puede ser simplemente el nombre de
un objeto, una variable de tipo primitivo o una constante.
El tipo del valor de retorno debe coincidir con el tipoDevuelto que se ha
indicado en la declaracin del mtodo.
Si el mtodo no devuelve nada (tipoDevuelto = void) la instruccin return es
opcional.
Un mtodo puede devolver un tipo primitivo, un array, un String o un objeto.
Un mtodo tiene un nico punto de inicio, representado por la llave de inicio
{. La ejecucin de un mtodo termina cuando se llega a la llave final } o
cuando se ejecuta la instruccin return.
La instruccin return puede aparecer en cualquier lugar dentro del mtodo,
no tiene que estar necesariamente al final.
IMPLEMENTACIN DE MTODOS EN JAVA
Pasos para implementar un mtodo:
1.

Describir lo que el mtodo debe hacer

2.

Determinar las entradas del mtodo

3.

Determinar los tipos de las entradas

4.

Determinar el tipo del valor retornado

5.

Escribir las instrucciones que forman el cuerpo del mtodo

6.

Prueba del mtodo: disear distintos casos de prueba

Ejemplo de mtodo: mtodo que suma dos nmeros enteros.

import java.util.*;
public class Metodos1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int numero1, numero2, resultado;
System.out.print("Introduce primer nmero: ");
numero1 = sc.nextInt();
System.out.print("Introduce segundo nmero: ");
numero2 = sc.nextInt();
resultado = sumar(numero1, numero2);
System.out.println("Suma: " + resultado);
}
Puli static int sumar(int a, int b) }
Int c;
C=a + b;
Return c;
}
}
El mtodo se llama sumar y recibe dos nmeros enteros a y b.

En la

llamada al mtodo los valores de las variables numero1 y numero2 se


copian en las variables a y b. El mtodo suma los dos nmeros y guarda el
resultado en c. Finalmente devuelve mediante la instruccin return la suma
calculada.

Ejemplo de programa Java que contiene un mtodo con varios


return:

Programa que lee por teclado un ao y calcula y muestra si es bisiesto. Para


realizar el clculo utiliza un mtodo llamado esBisiesto.
package bisiesto;
import java.util.*;
public class Bisiesto {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int ao;
System.out.print("Introduce ao: ");
ao = sc.nextInt();
if(esBisiesto(ao)) //llamada al mtodo
System.out.println("Bisiesto");
else
System.out.println("No es bisiesto");
}
/**
* mtodo que calcula si un ao es o no bisiesto
*/
public static boolean esBisiesto(int a){
if(a%4==0 && a%100!=0 || a%400==0)
return true;
else
return false;
}

En la llamada al mtodo bisiesto, el valor de la variable ao se copia en la


variable a y el mtodo trabaja con esta variable. El valor true false
devuelto por return pasa a ser el valor de la condicin.

Ejemplo de programa Java: Mtodo que no devuelve ningn valor. El


mtodo cajaTexto recibe un String y lo muestra rodeado con un borde.
El tipo devuelto es void y no es necesario escribir la sentencia return. El
mtodo acaba cuando se alcanza la llave final.
import java.util.*;
public class MetodoVoid {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String cadena;
System.out.print("Introduce cadena de texto: ");
cadena = sc.nextLine();
cajaTexto(cadena); //llamada al mtodo
}
/**
* mtodo que muestra un String rodeado por un borde
*/
public static void cajaTexto(String str){
int n = str.length();
for (int i = 0; i < n + 4; i++){
System.out.print("#");
}

System.out.println();
System.out.println("# " + str + " #");
for (int i = 0; i < n + 4; i++){
System.out.print("#");
}
System.out.println();
}
}

MTODOS QUE DEVUELVEN VALORES


Mtodos que devuelven valor
Dado el siguiente tringulo rectngulo:

Para dibujar este tringulo necesitamos los siguientes datos: base


y altura

La base y la altura, se utilizarn como parmetros para dibujar el tringulo


rectngulo. (Terminar de dibujar el triangulo rectngulo) Considerando la
base y la altura del tringulo rectngulo, se puede calcular el rea del
tringulo y la formula es la siguiente:

Calculo del rea. En todo tringulo, se verifica que el rea est dada por
el Semiproducto de la base por la altura del triangulo. Esta formula del rea
es muy familiar y sencilla de aplicar, y puede usarse en tringulos
rectngulos en funcin de sus catetos adyacentes al ngulo recto, pues uno
de ellos se toma como base y el otro como altura.
El mtodo deber retornar el valor calculado (rea). Entonces, debemos
implementar un
mtodo que devuelve valor en la clase RobotRecolector.

Considerando el formato de definicin de un Mtodo


<tipo-de-valor-devuelto> <nombre-mtodo> (<lista-parmetros>){
<sentencias-del-cuerpo-del-mtodo>
}
Vamos a analizar nuestro mtodo: En <tipo-de-valor-devuelto> definimos el
tipo de valor1 que queremos que nuestro mtodo devuelva, en este caso int
(tipo entero), en <nombre mtodo> definimos el nombre del mtodo, en

(<lista-parmetros>) definimos dos parmetros (base y altura) de tipo


entero y en <sentencias-del-cuerpodel-mtodo> implementamos la formula
dada para calcular el rea. Una vez que se calcula la frmula, se tiene que
devolver el resultado del mismo al lugar desde donde se invoc al mtodo.
Para eso vamos a utilizar la palabra reservada de Java return y la expresin
que queremos que devuelva, en este caso return area; Constante: Las
constantes en Java son como las variables, pero su valor no se altera
durante la ejecucin del programa. Se las preceden con el adjetivo final. Por
convencin,
las constantes se escriben en maysculas. Ejemplo: final int DIV = 2; Otros
ejemplos de constantes: Meses de un ao, PI, das de la semana, etc.

Finalmente en nuestro archivo MiPrograma podemos invocar


el mtodo

Error comn de programacin:


Olvidar devolver un valor de un mtodo que debe devolver un valor es un
error de sintaxis. Si se especifica un tipo de valor de retorno que no sea
void, el mtodo debe contener una instruccin return que devuelva un
valor del tipo de valor de retorno del mtodo. De manera similar, devolver

un valor de un mtodo cuyo tipo de valor de retorno se haya declarado void


es un error de sintaxis.

Importante considerar: hay tres formas de devolver el control al punto


en el que se invoc un mtodo. Si el mtodo no devuelve un resultado, el
control se devuelve simplemente cuando se llega a la llave derecha ( } ) que
termina el mtodo, o al ejecutar el enunciado: return; Si el mtodo devuelve
un resultado, el enunciado: return expresin; devuelve el valor de expresin.
Sobrecarga de Mtodos Lenguajes como Java permiten que existan distintos
mtodos con el mismo nombre siempre y cuando estos mtodos tengan
distintos conjuntos de parmetros (los cuales se determinan mediante el
nmero y los tipos de los parmetros). Esta tcnica se conoce como
sobrecarga de mtodos. La sobrecarga de mtodos se utiliza comnmente
para crear varios mtodos con el mismo nombre que realizan tareas
similares, pero con tipos de datos distintos.

Ejemplo: sobrecarga de mtodos

En el primer mtodo no se especifica la cantidad de conos a quitar, sino que


quita conos mientras hayCono. En el segundo mtodo s se le especifica la
cantidad de conos que se va a quitar, (cantConos). Los mtodos
sobrecargados se distinguen por su firma: La firma es una combinacin del
nombre del mtodo, el nmero y tipo de sus parmetros. Si el compilador de

Java

analizara

solamente

los

nombres

de

los

mtodos

durante

la

compilacin, el cdigo que se describe en el ejemplo anterior sera ambiguo;


el compilador no sabra cmo distinguir entre los dos mtodos quitarConos.
El compilador utiliza nombres ms largos deformados o decorados, que
incluyen el nombre original del mtodo, los tipos de cada parmetro y el
orden exacto de los parmetros, para determinar si los mtodos en una
clase son nicos en esa clase. De todas formas no es conviene abusar
demasiado de esta prestacin del lenguaje, porque resulta propensa a
errores (en ocasiones, creeremos estar llamando a una versin de un
mtodo cuando la que se ejecuta en realidad es otra).

ARREGLOS TIPOS
ARRAYS, ARREGLOS O FORMACIONES EN JAVA
Arreglos (Array) ? Un arreglo es una secuencia de datos primitivos o de
objetos, todos del mismo tipo, unidos bajo un identificador comn. ? Todos
los elementos de un arreglo tienen el mismo nombre pero se diferencian por
la posicin que ocupan en l. ? Son de tipo referencia ? Sinnimos: ?
Vector ? Tabla ? Matriz.
Algunas clases que hemos citado, como ArrayList o LinkedList, se
denominan colecciones de tamao flexible porque permiten modificar
dinmicamente el nmero de tems que contienen, es decir, ampliarlo o
reducirlo.

veces

nos

referiremos

estas

colecciones

como

arrays dinmicos porque son similares a los arrays dinmicos que se


emplean en otros lenguajes de programacin.
Los arrays dinmicos son muy potentes porque permiten crear colecciones
de tamao variable que podemos agrandar o empequeecer en funcin de
nuestras necesidades.
Sin embargo, cuando se conoce el nmero de elementos en una coleccin y
ste va a ser invariable (por ejemplo, los 12 meses del ao), ser ms
eficiente utilizar una coleccin de tamao fijo a la que denominamos array
esttico, arreglo esttico, formacin o vector. Si utilizamos el trmino array

o arreglo, a secas, entenderemos que hacemos alusin a un array esttico.


El uso de arrays estticos tiene ventajas e inconvenientes:

VENTAJAS
-

Acceso

INCONVENIENTES
y

operacin

con

elementos ms eficiente.
- Permiten almacenar tanto
objetos como tipos primitivos

- Rigidez. No se pueden redimensionar


(aunque s copiar a otros arrays estticos
de mayor tamao).

directamente
La sintaxis a emplear con arrays la exponemos a continuacin.

private

TipoPrimitivoUObjeto

nombreDelArray;

//Declaracin:

reserva espacio de memoria


nombreDelArray = new TipoPrimitivoUObjeto [numero]; //Creacin del
array
private int [ ] miArrayDeNumeros = { 2, -3, 4, 7, -10 }; //Sintaxis
ejemplo declarar y crear un array en una lnea
// Ejemplo de uso con tipos primitivos aprenderaprogramar.com
private int [ ] cochesHorasDelDia;
cochesHorasDelDia = new int [24]; // Creamos un array de enteros con
ndices entre el 0 y el 23
cochesHorasDelDia [9] = 4521; //Ejemplo de asignacin
cochesHorasDelDia [hora] = 4521; //Ejemplo de asignacin
cochesHorasDelDia [23]++ ; //Ejemplo de asignacin que equivale a
cochesHorasDelDia[23] +=1;

private boolean[ ] superado;


superado = new boolean [1000];
superado [832] = false;
//Ejemplo de uso con tipos objeto aprenderaprogramar.com
private Persona [ ] Grupo3A;
Grupo3A = new Persona [50]; //Creamos un array de objetos Persona con
ndices entre el 0 y el 49
private String [ ] nombre;
nombre = new String [200];
nombre [37] = Juan Antonio;
//Declarar el array y crear el objeto en una misma lnea
Tipo [ ] nombreDelArray = new Tipo [nmero];
//Ejemplo de cdigo que podramos incluir en un mtodo main
aprenderaprogramar.com
int [ ] arrayEnteros = {2, 3, 1, 7, -1}; //El 2 es el elemento con ndice 0 y
el -1 el elemento con ndice 4
String [ ] misNombres = new String [10];
misNombres [4] = Jos Alberto Prez;
System.out.println (misNombres[4]);
La numeracin de los ndices de los arrays va desde cero hasta ( nmero de
elementos 1 ). Tener en cuenta que la variable que es el nombre del array,
p.ej. misNombres, lo que contiene es un puntero o referencia al objeto que
es en s el array.

Un array en Java puede considerarse un objeto especial. Se crea


con la sentencia new como el resto de objetos, pero sin embargo no hay una
clase especfica en Java que defina el tipo de los arrays. Dada una
declaracin del tipo int [ ] cochesPorHora = new int [24];, hay ciertos errores
habituales frente a los que hay que estar atentos:
1. Pensar que los ndices van de 0 a 24. Falso: van de 0 a 23.
2. Pensar que el nmero de elementos total es 23. Falso: son 24.
3. Usar cochesPorHora [24]. El ndice 24 no existe y el uso de esa expresin
dara

lugar

un

error

en

tiempo

de

ejecucin del

tipo

ArrayIndexOutOfBoundsException.

Sobre un objeto que es un elemento de un array se pueden invocar


mtodos. Por ejemplo System.out.println (persona[17].getNombre() );. Por
otro lado, un elemento de un array puede almacenar un objeto annimo. Por
ejemplo persona [47] = new Persona (Juan, Prez Hernndez, 39, 1.75);,
donde los elementos entre parntesis son los parmetros requeridos por el
constructor de la clase Persona.
Para recorrer arrays, dado que se conoce el nmero de iteraciones, es
habitual usar for tradicionales.

Campo length para saber el nmero de elementos de un array


La sintaxis nombreDelArray.length nos devuelve un entero (int) con el
nmero de elementos que forman el array. Fjate que despus de length no
aparecen parntesis, lo que indica que no estamos invocando un mtodo,
sino accediendo a un atributo del array. El acceso a este atributo es posible
porque el API de Java mantiene este atributo como pblico:

si fuera privado no podramos acceder a l. Ejemplos de uso podran


ser los siguientes:

System.out.println (El nmero de elementos en el array misNombres es


de + misNombres.length );
for (int i = 0; i < misNombres.length; i++) {

System.out.println

(Nombre + i + : + misNombres[i]; }
En este ejemplo usamos i <, es decir, menor estricto, porque length nos
devuelve siempre un valor n+1 para unos ndices comprendidos entre 0 y n.
Uso de ciclos for each con arrays
Es posible usar ciclos for each con arrays. Por ejemplo:

//Ejemplo aprenderaprogramar.com
for (int tmpItem : cochesPorHora) { System.out.println (Nmero: +
tmpItem); }
String [ ] misNombres = new String [10];
For (String tmpObjeto : misNombres) { System.out.println (tmpObjeto); }
//Nota: en el caso de que un tem objeto no tenga contenido por pantalla
saldr null
El for each tiene ventajas como el poder recorrer una coleccin de la que se
desconoce su tamao, pero tambin inconvenientes como carecer de una
variable contadora en el ciclo. Si quisiramos contar tendramos que
introducir una variable contadora, cosa que con el for normal ya tenemos
con la propia definicin del bucle. Dado que en un array podemos conocer
con facilidad el nmero de elementos de que consta y disponer de forma
automtica de la variable contadora, ser ms habitual el uso de for
tradicionales con arrays que el uso del for extendido.
EJERCICIO.

Crea una clase con el mtodo main donde declares una variable de tipo
array de Strings que contenga los doce meses del ao, en minsculas y
declarados en una sola lnea. A continuacin declara una variable
mesSecreto de tipo String, y hazla igual a un elemento del array (por
ejemplo mesSecreto = mes[9]. El programa debe pedir al usuario que
adivine el mes secreto y si acierta mostrar un mensaje y si no pedir que
vuelva a intentar adivinar el mes secreto. Puedes comprobar si tu cdigo
es correcto consultando en los foros aprenderaprogramar.com.
Un ejemplo de ejecucin del programa podra ser este:
Adivine el mes secreto. Introduzca el nombre del mes en minsculas:
febrero
No ha acertado. Intente adivinarlo introduciendo otro mes: agosto
No ha acertado. Intente adivinarlo introduciendo otro mes: octubre
Ha acertado!

OPERACIONES CON ARREGLOS (ORDEN, RECORRIDO)


Arboles en Java: Recorrido Preorden, Inorden y Postorden
El recorrido de rboles refiere al proceso de visitar de una manera
sistemtica, exactamente una vez, cada nodo en una estructura de datos de
rbol (examinando y/o actualizando los datos en los nodos).

Preorden: (raz, izquierdo, derecho). Para recorrer un rbol binario no


vaco

en

preorden,

hay

que

realizar

las

siguientes

recursivamente en cada nodo, comenzando con el nodo de raz:


1.

Visite la raz

2.

Atraviese el sub-rbol izquierdo

3.

Atraviese el sub-rbol derecho

operaciones

Inorden: (izquierdo, raz, derecho). Para recorrer un rbol binario no vaco


en inorden (simtrico), hay que realizar las siguientes operaciones
recursivamente en cada nodo:
1. Atraviese el sub-rbol izquierdo
2. Visite la raz
3. Atraviese el sub-rbol derecho

Postorden: (izquierdo, derecho, raz). Para recorrer un rbol binario no


vaco

en

postorden,

hay

que

realizar

las

siguientes

operaciones

recursivamente en cada nodo:


1. Atraviese el sub-rbol izquierdo
2. Atraviese el sub-rbol derecho
3. Visite la raz
En general, la diferencia entre preorden, inorden y postorden es cundo se
recorre la raz. En los tres, se recorre primero el sub-rbol izquierdo y luego
el derecho.

En preorden, la raz se recorre antes que los recorridos de los subrboles


izquierdo y derecho

En inorden, la raz se recorre entre los recorridos de los rboles izquierdo y


derecho, y

En postorden, la raz se recorre despus de los recorridos por el subrbol


izquierdo y el derecho

public class NodoArbol

//miembros de acceso

NodoArbol nodoizquierdo;

int datos;

NodoArbol nododerecho;

7
8

//iniciar dato y hacer de este nodo un nodo hoja

public NodoArbol(int datosNodo)

10

11

datos = datosNodo;

12

nodoizquierdo = nododerecho = null; //el nodo no tiene hijos

13

14
15

//buscar punto de insercion e inserter nodo nuevo

16

public synchronized void insertar(int valorInsertar)

17

18

//insertar en subarbol izquierdo

19

if(valorInsertar < datos)

20

21

//insertar en subarbol izquierdo

22

if(nodoizquierdo == null)

23
24

nodoizquierdo = new NodoArbol(valorInsertar);


else

//continua recorriendo subarbol izquierdo

25

nodoizquierdo.insertar(valorInsertar);

26

27
28

//insertar nodo derecho

29

else if(valorInsertar > datos)

30

31

//insertar nuevo nodoArbol

32

if(nododerecho == null)

33

nododerecho = new NodoArbol(valorInsertar);

34

else

35

nododerecho.insertar(valorInsertar);

36
37

}
} // fin del metodo insertar

38 }
39
40 class Arbol
41 {
42

private NodoArbol raiz;

43
44

//construir un arbol vacio

45

public Arbol()

46

47
48

raiz = null;
}

49
50

//insertar un nuevo ndo en el arbol de busqueda binaria

51

public synchronized void insertarNodo(int valorInsertar)

52

53

if(raiz == null)

54

raiz = new NodoArbol(valorInsertar); //crea nodo raiz

55

else

56
57

raiz.insertar(valorInsertar); //llama al metodo insertar


}

58
59

// EMPIEZA EL RECORRIDO EN PREORDEN

60

public synchronized void recorridoPreorden()

61

62

ayudantePreorden(raiz);

63

64

//meoto recursivo para recorrido en preorden

65
66

private void ayudantePreorden(NodoArbol nodo)

67

68
69

if(nodo == null)
return;

70
71

System.out.print(nodo.datos + " ");

//mostrar datos del nodo

72

ayudantePreorden(nodo.nodoizquierdo);

//recorre

subarbol

73 izquierdo
74
75
76

ayudantePreorden(nodo.nododerecho);
derecho
}

77
78
79
80

//EMPEZAR RECORRIDO INORDEN


public synchronized void recorridoInorden()
{
ayudanteInorden(raiz);

81
82

83
84
85
86

//meoto recursivo para recorrido inorden


private void ayudanteInorden( NodoArbol nodo)
{
if(nodo == null)

87

return;

88
89

ayudanteInorden(nodo.nodoizquierdo);

90

System.out.print(nodo.datos + " ");

91

ayudanteInorden(nodo.nododerecho);

92
93

94
95
96

//EMPEZAR RECORRIDO PORORDEN


public synchronized void recorridoPosorden()

//recorre

subarbol

97
98
99

10

ayudantePosorden(raiz);

0
10

1
10
2
10
3

//meotod recursivo para recorrido posorden


private void ayudantePosorden(NodoArbol nodo)
{
if( nodo == null )

10
4

return;

10
5

ayudantePosorden(nodo.nodoizquierdo);

10

ayudantePosorden(nodo.nododerecho);

System.out.print(nodo.datos + " ");

10
7

10 }
8
10
9

Clase controladora:
?
1 import javax.swing.JOptionPane;
2

3 public class PruebaArbol


4{
5

public static void main(String args [])

Arbol arbol = new Arbol();

int valor;

String Dato;

1
0

System.out.println("Insertando los siguientes valores: ");

1
1
1
2
1

Dato = JOptionPane.showInputDialog("Inserta el numero de nodos


que desea ingresar");
int n = Integer.parseInt(Dato);

3
1
4

for(int i = 1; i <= n; i++ )


{

1
5

Dato = JOptionPane.showInputDialog("Dame el " + i + " valor para


colocar en el Arbol");

valor = Integer.parseInt(Dato);

System.out.print(valor + " ");

1
7
1

arbol.insertarNodo(valor);
}

8
1
9

System.out.println("\n\nRecorrido Preorden");

2
0
2
1
2
2
2
3
2
arbol.recorridoPreorden();

4
2
5

System.out.println("\n\nRecorrido Inorden");

arbol.recorridoInorden();

6
2
7

System.out.println("\n\nRecorrido Postorden");

arbol.recorridoPosorden();

8
2}
9
3
0
3
1
3
2
3
3

DECLARACIN DE OBJETOS Y CONSTRUCTORES


En Java, los objetos son cosntruidos. Cada vez que hacemos un nuevo
objeto, al menos un constructor es invocado. Toda clase tiene un
constructor, aunque nosotros no lo hallamos creado explcitamente, el
compilador construir uno por nosotros.. Por ahora, vamos a enfocarnos
sobre las reglas bsicas de las declaraciones. Aqu usaremos un ejemplo
simple:
1
class Foo{
2
protected Foo(){ } // Este es el constructor de Foo
3
protected void Foo() { } //Este es un mtodo mal nombrado, pero legal.
4
}
5
Lo primero que vemos es que el constructor se parece mucho a un mtodo.
La diferencia clave es que el constructor no puede, nunca, nunca, nunca,
tener un valor de retorno, NUNCA!.
Las declaraciones de los constructores sin embargo pueden tener cualquiera
de los modificadores de acceso, y pueden tener argumentos (incluidos varargs), como los mtodos. La otra GRAN REGLA, es entender que el
constructor debe tener el mismo nombre que la clase en la que ha sido
declarada. No pueden ser marcados como static, no pueden ser marcados
como final o abstract (Porque no pueden ser sustituidos). A continuacin
veremos unos ejemplos legales e ilegales sobre las declaraciones de los
constructores:
1

class Foo2 {

//Constructores legales

Foo2() { }

private Foo2 (byte b) { }

Foo2(int x){ }

6
Foo2(int x, int... y){ }
7
8
//Constructores Ilegales
9
void Foo2() { }

//Es un mtodo, no un constructor

10
Foo() { }

//No es ni un mtodo ni un constructor

11
Foo2(short s);

//Parece un mtodo abstracto

12
static Foo2(float f) { }

//No puede ser static

final Foo2(long x) { }

//No puede ser final

13
14
abstract Foo2(char c) { } //No puede ser abstrac
15
Foo2(int... x, int t){ }

//Mala sintaxis de var-arg

16

CONSTRUCTORES EN JAVA
La introduccin La programacin "insegura" uno de los mayores culpables
del encarecimiento de la programacin. Dos de estos aspectos de seguridad
son la inicializacin y la limpieza. C++ introdujo el concepto de constructor
Java tambin adopt el constructor, y proporciona un mtodo que libera
automticamente recursos de memoria cuando dejan de ser utilizados, se
llama garbage collector.
Pasos para la inicializacin 1.- Java inicializa siempre con valores por
defecto las variables que son miembros de la clases, mtodos. 2.- El
segundo paso para la inicializacin correcta de objetos es el uso de
constructores. 3.-Java todava dispone de una tercera lnea de actuacin
para evitar que haya variables sin inicializar correctamente. Son los
inicializadores. Java no permite que haya variable miembro que no estn
inicializadas VARIABLES NUMERICAS (PRIMITIVO) SE ESTABLECEN EN CERO
VARIABLES BOOLEAN SE ESTABLECEN EN FALSO VARIABLES DE REFERENCIA
SE ESTABLECEN EN NULL

DEFINICION. El constructor de una clase es un tipo especfico de mtodo


(especial y estndar) que se usa para inicializar los objetos de esa clase. Es
una funcin que se ejecuta automticamente siempre al crear un objeto.
La principal misin del Constructor es reservar memoria e inicializar la
variable miembro de la clase En general, se los utiliza para inicializar los
estados de las variables de instancia
Incluya Constructores en la declaracion de una Clase, para asegurar que las
variables de instancia de la clase contengan valores vlidos cuando se creen
objetos de esa clase TIPOS DE CONSTRUCTORES 1. Constructor por defecto
(no-args) 2. Constructor de copia 3. Constructor comn(personalizado)
Caractersticas

java invoca al constructor al crear el objeto.

Los

Constructores no tienen valor de retorno (ni siquiera void). Su nombre es el


mismo que el de la clase Pueden usarse cualquier modificador de acceso
Se puede definir cero, uno o ms constructores Si ya tenemos un
constructor

con

argumentos,

no

se

generar

uno

sin

argumentos

automticamente.
Declaracion del constructor (sintaxis) Modificador de Acceso nombre clase
(lista
{

de

parmetros)

public

Ventas

preciocontado=(precio*0.12)+precio;

(double

precio

System.out.println("El

Precio

)
al

Contado es ;"+preciocontado); } }
Llamada

al

constructor

nombre

clase

objeto

new

nombreclase

(<parametros>); El constructor se invoca automticamente cuando new


crea un objeto de esa clase. objeto es una variable de referencia. La
instancia (new) reserva el lugar de almacenamiento e invoca al constructor.
Referencia this si un parmetro tiene el mismo identificador (nombre) que
una variable de instancia se usa la palabra clave this para identificar cual
es la variable de instancia: Referencia al objeto actual.
Permite invocar mtodos del objeto actual.
Permite referenciar atributos del objeto actual
Permite devolver una referencia al objeto actual

Permite invocaciones entre constructores


Al acceder a variables de instancia de una clase, la palabra clave this hace
referencia a los miembros de la propia clase public class Pelicula { private
String titulo; public void setTitulo(String titulo) { this.titulo = titulo; } }
Referencia super La nueva clase hereda de la primera todos los mtodos y
los atributos

Se usa para invocar constructores de la clase padre

Debe ser la primera sentencia del constructor de la clase hijo


Esta referencia tambin se usa para invocar cualquier mtodo del padre.
Si la superclase no tiene un constructor sin argumentos, se debers definir
un constructor en la subclase . class Animal { Animal(String name) { } }
class Caballo extends Animal { Horse() { super(); // error } } super() llama al
constructor de la clase de la que se hereda (extends). Recuerda que todas
las clases heredan en ltima instancia a la clase Object.

Objetos y Primitivos.
Al disear sus primeros programas en Java, pudo notar que todo gira
alrededor de instancias de Objetos que son manipuladas a travs de
referencias:

Al utilizar referencias en Java estas pueden ser inicializadas sin que


pertenezcan a ninguna instancia de Objeto:

La declaracin anterior genera una referencia, sin embargo, esta no es


asociada con ninguna instancia de Objeto, para llevar acabo este proceso es
necesario utilizar el vocablo new.

La declaracin anterior no solo genera una instancia nueva de la Clase


String, sino le asigna un valor inicial ("Algo sencillo") el cual es asignado a la
referencia let; este mecanismo de agregar valores al generar una instancia

es llevada acabo a travs de mtodos denominados constructores los cuales


sern descritos posteriormente.
El hecho de generar instancias de objetos es un proceso involucrado
( hablando en trminos computacionales mas no en sintaxis ) , es por esto
que Java ofrece un mecanismo simplstico para definir estructuras de datos
como alternativa a utilizar Clases/Objetos, dichas estructuras son conocidas
como primitivos.
Aunque estrictamente hablando un primitivo no es una clase a travs de un
primitivo se facilita el uso de valores comnmente utilizados en lenguajes
de programacin, donde el generar una instancia de Clase resultara en un
proceso tardado y mecnico. En la siguiente tabla se describen los diversos
primitivos disponibles en el lenguaje Java:
Valor Mximo
Unicode 216- 1
+127
+215-1
+231-1
+263-1
IEEE754
IEEE754
Ntese que estos primitivos inician con letra minscula, en la tabla anterior
se describen los rangos de dichos primitivos as como sus respectivos
"Wrappers"; estos "Wrappers" son Clases utilizadas como contra parte de
primitivos:

La primer linea genera un primitivo el cual es asignado a la variable c,


posteriormente se genera una instancia de la Clase Character (Ntese el uso
del vocablo new); el uso de "Wrappers" (Objetos) para primitivos es
empleado bajo ciertas circunstancias, sin embargo, vale mencionar que
existen

diversos

mecanismos

para

convertir

de

Clases

tipo

Objeto

("Wrappers") a primitivos y viceversa, a continuacin se describen los


mecanismos para realizar este tipo de conversiones :

HERENCIA, SUBCLASE SUPERCLASE


JERARQUAS

DE

HERENCIA

EN

JAVA.

SUPERCLASES

SUBCLASES.
En Java muchas subclases pueden heredar de una misma superclase, y a su
vez una subclase puede convertirse en superclase de otra. As las cosas,
podemos hablar de una jerarqua de herencia. La jerarqua es el esquema
organizativo de las clases con relacin de herencia entre s.
En un proyecto nosotros definimos nuestra propia jerarqua de herencia.

Las clases del API de Java igualmente tienen establecida una jerarqua de
herencia, en este caso definida por el equipo de desarrollo del lenguaje de la
multinacional Oracle.

La herencia es una tcnica de abstraccin que nos permite agrupar objetos


con caractersticas comunes. Todas las aplicaciones Java usan herencia,
aunque no lo hagan de forma explcita. Esto es as porque cuando creamos
una clase sin ninguna referencia a una superclase, el propio compilador
inserta en la clase creada una relacin de herencia directa con la la clase
java.lang.Object. Por este motivo todos los objetos, sean de la clase que
sean, pueden invocar mtodos de la clase java.lang.Object como equals() y
toString(), aunque no siempre se van a obtener buenos resultados as.
Si quisiramos podramos escribir para todas las clases public class
NombreDeLaClase extends Object, aunque como es algo implcito a Java
normalmente no lo escribiremos por ser redundante. En los diagramas
representativos de la jerarqua de herencia ocurre lo mismo: Object siempre
est en la cabecera del diagrama, aunque normalmente no se represente ya
que se da por sobreentendido. Recordar que en Java los tipos primitivos no
son objetos: no son instancias de clase, y por tanto no heredan de la
superclase Object.
Los campos privados de una superclase no son accesibles por la subclase
directamente. Decimos que la subclase no tiene derechos de acceso sobre
los campos privados de la superclase. Para acceder a ellos tendr que hacer
uso de mtodos de acceso o modificacin. Una subclase puede invocar a

cualquier mtodo pblico de su superclase como si fuese propio. Lo veremos


con ejemplos.

Ejemplo de herencia en java. Extends y super.


Para declarar la herencia en Java usamos la palabra clave extends. Ejemplo:
public class MiClase2 extends Miclase1. Para familiarizarte con la herencia
te proponemos que escribas y estudies un pequeo programa donde se
hace uso de ella. Escribe el cdigo de las clases que mostramos a
continuacin.

//Cdigo de la clase Persona ejemplo aprenderaprogramar.com


public class Persona {
private String nombre;
private String apellidos;
private int edad;
//Constructor
public Persona (String nombre, String apellidos, int edad) {
this.nombre = nombre;
this.apellidos = apellidos;
this.edad = edad;

//Mtodos
public String getNombre () { return nombre; }

public String getApellidos () { return apellidos; }


public int getEdad () { return edad; }
} //Cierre de la clase

//Cdigo de la clase profesor, subclase de la clase


Persona ejemplo aprenderaprogramar.com
public class Profesor extends Persona {
//Campos especficos de la subclase.
private String IdProfesor;
//Constructor de la subclase: incluimos como
parmetros al menos los del constructor de la
superclase
public Profesor (String nombre, String apellidos,
int edad) {
super(nombre, apellidos, edad);
IdProfesor = "Unknown";

} //Cierre del

constructor
//Mtodos especficos de la subclase
public void setIdProfesor (String IdProfesor)
{ this.IdProfesor = IdProfesor; }
public String getIdProfesor () { return IdProfesor;
}

public void mostrarNombreApellidosYCarnet() {


// nombre = "Paco"; Si tratramos de acceder
directamente a un campo privado de la superclase,
salta un error
// S podemos acceder a variables de instancia
a travs de los mtodos de acceso pblicos de la
superclase
System.out.println ("Profesor de nombre: " +
getNombre() + " " + getApellidos() +
" con Id de profesor: " + getIdProfesor() ); }
} //Cierre de la clase

//Cdigo de test aprenderaprogramar.com


public class TestHerencia1 {
public static void main (String [ ] Args) {
Profesor profesor1 = new Profesor ("Juan", "Hernndez Garca",
33);
profesor1.setIdProfesor("Prof 22-387-11");
profesor1.mostrarNombreApellidosYCarnet();}
} //Cierre de la clase

El diagrama de clases y el resultado del test son del tipo que


mostramos a continuacin:

Profesor de nombre: Juan Hernndez Garca con Id de profesor:


Prof 22-387-11
Los aspectos a destacar del cdigo son:
La clase persona es una clase normal definida tal y como lo venimos
haciendo habitualmente mientras que la clase Profesor es una subclase de
Persona con ciertas peculiaridades.
Los objetos de la subclase van a tener campos nombre, apellidos y edad
(heredados de Persona) y un campo especfico IdProfesor. El constructor de
una subclase ha de llevar obligatoriamente como parmetros al menos los
mismos parmetros que el constructor de la superclase.
El constructor de la subclase invoca al constructor de la superclase.
Para ello se incluye, obligatoriamente, la palabra clave super como primera
lnea del constructor de la subclase. La palabra super ir seguida de
parntesis dentro de los cuales pondremos los parmetros que requiera el
constructor de la superclase al que queramos invocar. En este caso solo
tenamos un constructor de superclase que requera tres parmetros. Si p.ej.
hubiramos tenido otro constructor que no requiriera ningn parmetro
podramos haber usado uno u otro, es decir, super(nombre, apellidos, edad)
super(), o bien ambos teniendo dos constructores para la superclase y dos
constructores para la subclase. Ejemplo:

En la superclase:

public Persona() {
nombre = "";
apellidos = "";

edad = 0; }
public Persona (String nombre, String
apellidos, int edad) {
this.nombre = nombre;
this.apellidos = apellidos;
this.edad = edad;

En la subclase:

public Profesor () {
super();
IdProfesor = "Unknown";}
public Profesor (String nombre, String

apellidos, int edad) {


super(nombre, apellidos, edad);
IdProfesor = "Unknown"; }

DEMOSTRACIN DE COMPORTAMIENTO POLIMRFICO


Cuando el compilador encuentra una llamada a un mtodo que se realiza a
travs de una variable, determina si el
mtodo puede llamarse verificando el tipo de clase de la variable. Si esa
clase contiene la declaracin del mtodo
apropiada (o hereda una), se compila la llamada. En tiempo de ejecucin, el
tipo del objeto al cual serefiere la variable es el que determina el mtodo
que se utilizar

Clases y mtodos abstractos.


En algunos casos es conveniente declarar clases para las cuales no tenemos
la intencin de crear instancias de objetos. A dichas clases se les conoce
como clases abstractas. Como se utilizan slo como superclases en
jerarquas de herencia, nos referimos a ellas como superclases abstractas.
Estas clases no pueden utilizarse para instanciar objetos, ya que estn
incompletas.El propsito principal de una clase abstracta es proporcionar
una superclase apropiada, a partir de la cual puedan heredar otras clases y,
por ende, compartir un diseo comn

Mtodos y clases final


Un mtodo que se declara como final en una superclase no se puede redefi
nir en una subclase.Los mtodos que se declaran como private son final de
manera implcita, ya que es imposible sobrescribirlos en
una subclase.Los mtodos que se declaran como static son final de manera
implcita. Una clase que se declara como final no puede ser una superclase
(es decir, una clase no puede extender a una clase final).

Mtodo getClass
Todos los objetos en Java conocen su propia clase y pueden acceder a esta
informacin a travs del mtodo getClass, que todas las clases heredan de
la clase Object. El mtodo getClass devuelve un objeto de tipo Class(del
paquete java.lang), el cual contiene informacin acerca del tipo del objeto,
incluyendo el nombre de su clase

Mtodos de las interfaces


Todos los miembros de una interfaz deben ser public, y las interfaces no
pueden

especificar

ningn

detalle

de implementacin,

como

las

declaraciones de mtodos concretos y las variables de instancia.Todos los


mtodos que se declaran en una interfaz son public abstract de manera
implcita, y todos los campos son public, static y final de manera implcita.

Entrada/salida simple basada en GUI con JOptionPane


La clase JOptionPane de Java (paquete javax.swing) proporciona cuadros de
dilogo

preempaquetados

para

entrada

salida.

El

mtodo

static

showInputDialog de JOptionPane muestra un dilogo de entrada.Por lo


general, un indicador utiliza la capitalizacin estilo oracin: un estilo que
capitaliza slo la primera letra de la primera palabra en el texto, a menos
que la palabra sea un nombre propio.

Generalidades de los componentes de Swing


La mayora de los componentes de GUI de Swing se encuentran en el
paquete javax.swing. Forman parte de las Java Foundation Classes (JFC): las
bibliotecas de Java para el desarrollo de GUIs en distintas plataformas.En
conjunto, a la apariencia y la forma en la que interacta el usuario con la
aplicacin se les denomina la apariencia visual. Los componentes de GUI de
Swing nos permiten especifi car una apariencia visual uniforme para una
aplicacin a travs de todas las plataformas, o para usar la apariencia visual
personalizada de cada plataforma

Mostrar texto e imgenes en una ventana


La mayora de las ventanas son instancias de la clase JFrame o una subclase
de JFrame. JFrame proporciona los atributos y comportamientos bsicos de
una ventana.Un objeto JLabel muestra una sola lnea de texto de slo
lectura, una imagen, o texto y una imagen. Por lo general, el texto en un
objeto JLabel usa la capitalizacin estilo oracin.

Crear Subclases
Se declara que un clase es una subclase de otra clase dentro de La
declaracin de Clase. Por ejemplo, supongamos que queremos crear una
subclase llamada SubClase de otra clase llamada SuperClase. Se escribira
esto.
class SubClass extends SuperClass {
...
}

Esto declara que SubClase es una subclase de SuperClase. Y tambin


declara implcitamene que SuperClase es la superclase de SubClase. Una
subclase tambin hereda variables y miembros de las superclases de su
superclase, y as a lo largo del rbol de la herencia. Para hacer esta
explicacin un poco ms sencilla, cuando este tutorial se refiere a la
superclase de una clase significa el ancestro ms directo de la clase as
como a todas sus clases ascendentes.
Una clase Java slo puede tener una superclase directa. Java no soporta la
herencia mltiple.
Crear una subclase puede ser tan sencillo como incluir la clausula extends
en la declaracin de la clase. Sin embargo, normalmente se deber realizar
alguna cosa ms cuando se crea una subclase, como sobreescribir mtodos,
etc...

Qu variables miembro hereda una subclase?


Regla: Una subclase hereda todas las variables miembros de su superclase
que puedan ser accesibles desde la subclase (a menos que la variable
miembro est oculta en la subclase).

Esto es, las subclases.


heredan aquellas variables miembros declaradas como public o protected.
heredan aquellas variables miembros declaradas sin especificador de
acceso (normalmente conocidas como "Amigas") siempre que la subclase
est en el mismo paquete que la clase.
no hereda las variables miembros de la superclase si la subclase declara
una variable miembro que utiliza el mismo nombre. La variable miembro de
la subclase se dice que oculta a la variable miembro de la superclase.
no hereda las variables miembro private.

Ocultar Variables Miembro


Como se mencion en la seccin anterior, las variables miembros definidas
en la subclase ocultan las variables miembro que tienen el mismo nombre
en la superclase.
Como esta caracterstica del lenguaje Java es poderosa y conveniente,
puede ser una fuente de errores: ocultar una variable miembro puede
hacerse deliberadamente o por accidente. Entonces, cuando nombres tus
variables miembro se cuidadoso y oculta slo las variables miembro que
realmente deseas ocultar.
Una caracteristica interesante de las variables miembro en Java es que una
clase puede acceder a una variable miembro oculta a travs de su
superclase. Considere este pareja de superclase y subclase.
class Super {
Number unNumero;
}
class Sub extends Super {
Float unNumero;
}
La variable unNumero de Sub oculta a la variable unNumero de Super. Pero
se puede acceder a la variable de la superclase utilizando.
super.unNumero
super es una palabra clave del lenguaje Java que permite a un mtodo
referirse a las variables ocultas y mtodos sobreescritos de una superclase.
Qu mtodos hereda una Subclase?
La regla que especifica los mtodos heredados por una subclase es similar a
la de las variables miembro.
Regla: Una subclase hereda todos los mtodos de sus superclase que son
accesibles para la subclase (a menos que el mtodo sea sobreescrito por la
subclase).

Esto es, una Subclase.


hereda aquellos mtodos declarados como public o protected

hereda aquellos mtodos sin especificador de acceso, siempre que la


subclase est en el mismo paquete que la clase.
no hereda un mtodo de la superclase si la subclase declara un mtodo que
utiliza el mismo nombre. Se dice que el mtodo de la subclase sobreescribe
al mtodo de la superclase.
no hereda los mtodos private.

Sobreescribir Mtodos.
La habilidad de una subclase para sobreescribir un mtodo de su superclase
permite a una clase heredar de su superclase aquellos comportamientos
"ms cercanos" y luego suplementar o modificar el comportamiento de la
superclase.

Crear Subclases.
Se declara que una clase es una subclase de otra clase dentro de La

declaracin de Clase. Por ejemplo, supongamos que queremos crear una


subclase llamada SubClase de otra clase llamada SuperClase. Se escribira
esto.

class SubClass extends SuperClass {


...
}
Esto declara que SubClase es una subclase de SuperClase. Y tambin
declara implcitamene que SuperClase es la superclase de SubClase. Una
subclase tambin hereda variables y miembros de las superclases de su
superclase, y as a lo largo del rbol de la herencia. Para hacer esta
explicacin un poco ms sencilla, cuando este tutorial se refiere a la
superclase de una clase significa el ancestro ms directo de la clase as
como a todas sus clases ascendentes.
Una clase Java slo puede tener una superclase directa. Java no soporta la
herencia mltiple.

Crear una subclase puede ser tan sencillo como incluir la clausula extends
en la declaracin de la clase.

Вам также может понравиться