0% encontró este documento útil (0 votos)
13 vistas64 páginas

Programacion en Java 2

Cargado por

Luis Bander
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
13 vistas64 páginas

Programacion en Java 2

Cargado por

Luis Bander
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 64

DO

'
• 1
j
'\I• \

n¿ept91 s p1'aiV~-;
co 1
' '. \\' ,, ' '\
¡\ OBJE TIVos
• 11 to\·1·''
Desp ,
Al!IPortam1e.~ . ~:.1-'\:,1\',1~.·'\ . t' , ues de haber le(d
CUl'' 1 1 \ \· • ·' , i

• De. c ¡,arar métodos 0 Y estudiado e.r;te capítulo usted podrá:


. nes mote • cas ,
foOC1º . , ,. , • D1fere • correctamente
• E nc1ar entre un métod , ~n el entorno de una clase
Mensaje .... .'\. , • entende r la implicación quºe t~ubhco Y un método privado •
, •
1ene el acceso público y el acceso ' d
Número oleato.~10 onocer como aplicar lo d' . por defecto a un meto o.
• P asar cad.enas de caractere s ststintos accesos a un método en la implementación de sus e1ases.

parámetros formo~ , • n·ri al
paso de argumentos., • •, . . C 1 erenc1ar un método de p~ograma desde la línea de órdenes
• onocer los métodos un ,~etodo estático o de clase •
paso par referencia·· .. ,· .' _· ,. ·n:-í: matematicos qu • •
e incorpora Java en la clase Ma t h .
paso par valor •,
CONT ENID O
Referendo 8.1. Métodos .
5ob,ecarga 8.2. Método main ().
Visibilidad 8.3. ADevolución de valores de un método
8.4. cceso a métodos. •
8.5. Paso de argumentos a métodos.
8 •6 • M e'tod os abstractos.
8.7. ~obrecarga de métodos.
8.8. Ambito (alcance).
8.9. Recursividad.
8.10. Biblioteca de clases Java.
Resumen.
Ejercicios.
Proble,nas.

INTRODUCCIÓN
bajo un solo-nomb
Un método es un m.inip rogr~a dentro un ,programa. Los ~étodo s ~ontienen ~rias sentencias s .ab.ouan espa<
que u~ programa_p_uede utihz~ una o mas v~ces para e1ec~!ar dichas sentencias. Los método de dividir un pxoye
reduciendo repetic iones y haciend o más fácil la programac1on, proporcionando un medio
s en un progr,
grand~ en módulos pequeñ os más maneja bles. Este capítulo examina el papel (rol) de loa método pue:den ex
Java. Los métodos en Java siempr e han de ser miembros de una clase; en otros lenguaje s;comQ C++,
>n o program a Java tie1
de modo autónomo o bien como miemb ros de una clase. Como ya cono<?e, cada. a!)licací?
miembros de una o
menos un método main { ) ; sin embarg_o, cada program a Java consta de muchos métodos
s hace que las mism:
clases en lugar de un método main { ) grande . La división del código en clases y método
un método , pruébe lo y depúre
puedan reutilizar en su progra ma y en otros program as .• Despué s de que escriba
sQlo se ~ecesita llar
puede utilizar nuevam ente una y otra vez. Para reutilizar un método dentro ·de su programa
en la clase derivad
método. Por el mecani smo de la herenc ia, todo método de una clase se podrá reutilizar
que otros program a.& pueden ret
clases Ysus métodos miemb ro se agrupa n en paquet es de c\a.3~s, de tal fo~a
desarrollo. Y dado q
las clases y los método s definid os en ellas, por esa razón se 'puede ahorrar tiempo de
del progr~ a compl
paquetes contienen clases presum ibleme nte compro badas, se incrementa la fiabilidad
ente, la~ utilizan. Es I
mayoría de los progra madore s no constru yen paquet es de clases, sino que, simplem
~e tiempo de des
conocer los paquet es que incorpo ra Java para utilizar las clases proporcionadas Y ahorra_r,
en Java, Y_ un b,
Las clases, los objetos y los método s son una de las piedras angular es d~ la programacion
das ~e. 1~~ métc
de todas las propie dades básica s ya expues tas, así como de las propied ades avanza 1~ ~edeñmcion de:
proporcionarán una potenc ia, a veces impens able, a sus prograrnac~ones. La sobr~ca:ga,
eficien te de progr<
Y1 recursividad son propie dades cuyo conoci miento es esencia l para un diseno
ª
numerosas aplicaciones.
Programación en JAVA 2
244

8.1. MÉTODOS

L as clases constan de dos elementosbprincipales:


• d
variables de instancia Y métodos. Un método es u
• d e re t orno y una 1ista
• d e argumentos n
bloque de código que tiene un nom re, tipo e acceso, tipo
0
parámetros. Puede tener tamb!én palabras clave ~sociadas tales como static, abstract y final.
Los métodos en Java son equivalentes a las funciones de las clases de C++. Con la excepción de las
sentencias de declaración de objetos y variables, y los bloques de inicialización estática, todo en el
código ejecutable ~n Java se sitúa dentro de un método. Una definición de un método consta de dos
partes: cabecera y cuerpo.

Sintaxis

tipo nombre (lista de parámetros)


{
// cuerpo del método
}

tipo especifica el tipo de datos devuelto por el método (cualquier tipo válido incluyendo tipos
clase que se puedan crear).
nombre el nombre que identifica al método. El convenio suele ser utilizar una letra minúscula para la
primera letra del nombre.

Si el método no devuelve un valor, su tipo de retorno debe ser void. El nombre del método puede
ser cualquiera distinto de aquellos ya utilizados por otros elementos dentro del ámbito actual (no puede
ser igual a una palabra reservada Java).
La lista de parámetros es una secuencia de parejas de identificadores y tipos de datos separados por
comas. Los parámetros son, fundamentalmente, variables que reciben el valor de los argumentos pasados
al método
,,, ,,,
cuando éste es llamado. Si el método no tiene parámetros, entonces la lista de parámetros
sera vac1a. .
Los métodos que devuelven a la rutina llamadora un tipo de datos distinto de void deben utilizar
una sentencia ret urn con la siguiente sintaxis:

return valor
valor es una expresión con el valor que-devuelve.

Ejemplo
void saludoBienvenida()
{
System.out.println(u ¡Hola!u);
System.out.pr~nt(uMé todo llamado saludoBienvenidau).
System.out.println(u que contiene tres sentencias u;;
}

Un método se debe declarar


. siempre dentro de una' clas
' e.
class Saludo
{
// otras partes de la clase
void saludoBienvenida()
{
System.out.println(u ¡Hola!u);
r Métodos 245
Syster n.out .
Syster n •Print ( 11 Métod
}
-out.p rintln( 11 qu~ llamad o salud0 Bienve nida11 ).
contie ne tres senten cias u;;
}

El método ha sido •
·1· insertad o e n una clase llamada
ut1 izar para crear un ob. t O 8 1
se puede
declarado en la clase. Je Saludo y los objetos ten~rI :º • Re~ordemos que la claseenida () ,
. un metodo saludo Bienv

Ejemplo
Saludo unObJ 'eto -_ new s 1
.ª udo();
unObj eto.sa ludoB ienvenida ()

Se ha creado un objeto mea·1ante el uso del d


. . elopera or new antes. de que se pueda uf11izar.
- Ahora se
puede crear un program a comple to que utthza métod 0
saludo Bienve nida ().
// progra m de prueb a
public class Saludo
{
void saludo Bienv enida( )
{
Syste m.out .print ln(/l¡H ola /1 ) ;

System .out.p rint(/1 Método llamad o saludo Bienve nida") ;


Syste m.out .print ln( 11 que contie ne tres senten cias 11
);

public static void main( final String []args )


{
Saludo unübj eto = new Saludo ();
unObj eto.sa ludoB ienven ida();
}
}

nvenid a ()
. Este program a contien e dos declaraciones de métodos. A continuación de sal udoBie
el programa
viene un segund o método llamad o main () , este método es el primero que se llama cuando
. Una vez
comienza a ejecuta rse. main () contien e las sentencias que crean y utilizan un objeto Saludo
. java. A
que se ha creado y editado el progra ma se ha de compilar el programa: j avac Saludo
continuación se ejecuta utilizan do la orden: java Saludo .
le .,de la
Esta orden produc e que el sistema J av~-~~ tiempo de ejecución busqu~ el c?~g~ ejecutab
el metodo
clase Saludo que está localiz ado en el archivo saludo . class y a cont1nuac1on ejecute
ma in ( ) que pertene ce a la clase dada. (~.Si? º se
La ejecuci ón de cualqu ier program a Java se inicia siempre llamando a un m_étodo main
se v1suahza el
e~cuentra ningún método main () en la clase dada, el programa-no se puede ejecutar y
siguiente mensaj e de error:
th
Excep tion in thread 11 main" java.la ng.No SuchM e ºªErro r: main

Nota
L ,, d llamada a otro método.
nu \Cntencia en el interior de un metodo pue e ser una
246 Programación en JAVA 2

8.2. MÉTODO MAI~ ( )


Todas las aplicaciones Java__ co~ien~an llamando al método main () qu~ se s_i~úa en la clase cuyo
nombre ha sido dado a la maquina virtual Java (JVM) para comenzar la eJecucion del programa. N
0
todas las clases necesitan un método main () , sólo las clases que son el punto de arranque del program
El método main () se declara static, ya que es llamado por la máquina Java en tiempo de ejecucióa.
antes de que se cree cualquier objeto. Los argumentos que se pasan al método main () pueden s n
,, denes que se 1ntro
cualquiera de la línea de or • d uce cuand o se eJecuta
• e 1 programa. er

Sintaxis
public static void main(String [] args)

,,
Ejemplo. La clase Parra fo contiene sólo el método main (). Este consta de una línea de código
para dar salida por pantalla a la frase "Este es el verbo" junto a la cadena args [ oJ de la
línea de órdenes.
public class Parrafo
{
public sta~ic void main(String []ar)
{
System.out.println(uEste es el verbo u+ ar[O]);
}
}

Esta clase se edita y se guarda con el nombre de Parra fo.java; una vez compilada con la orden
j _avac___Parraf~. java (la ~ompi:ación genera el archivo Parra fo. class) , se ejecuta. La orden de
eJecucion se realiza en una hnea, linea de órdenes, y en este caso está esperando que se introduzca una
cadena adicional:

java Parrafo pasear

la salida por pantalla:

Este es el verbo pasear

Los argumentos de las líneas de órdenes se consideran argumentos d 1 "t d •


e me o o main ().

8.3. DEVOLUCIÓN DE VALORES DE UN MÉTODO

La sentencia ret urn se utiliza para salir del método actual . d


~ evo1ver el valor especificado por el tipo
• •

de retorno del método. Si el tipo de retorno del n1 étod 0


4

sola. es void, la palabra reservada return se utiliza

Sintaxis
return;
return objeto;
----------- Métodos 247
Ejemplo ----------------------
int flex ()
{
int clorExtremo•
// realiza cálculos
re t urn c 1 OrExtremo; Y almacena resultados en clorExtremo
}

U étodo se pued I'


f11
nm e u zar como si tuviera el valor devuelto en la expresión de retorno
int x = unObjeto.flex () * 44.
I

En este
resultado caso
a la vanable x. el valor devuelto por el m~todo
~e evalúa f 1 ex ( ) , se multiplica por 4 4 y se asigna el

EJEMPLO 8.1. El método calcularArea () de la clase Rectangulo se utiliza para devolver el área
de un rectángulo.
public class PruebaRetorno
{
public static void main(String ar[])
{
Rectangulo r = new Rectangulo(3. 0,7.0);
Systern.out.p rintln(u El área es u+ r.calcularArea ());
}
}

class Rectangulo
{
• te double base, altura; h)
priva . u bl e b , double
public Rectangulo(do
{
base - b;
altura= h;

}
public double calcularArea( )
{
return base*altura;
}

} ·ct
• ción da lugar a esta sah a:
Una vez compilado, la eJecu

El área es 21.0 ·

Regla ~~
sel tipo de retomo es void .
• ~~~~~00
Si un método no devuelve nmg ~~~~-~~~-~-~--

Un método declarado como:


Void marco () { ... }
amación en JAVA 2
248 Progr

método que no devuelve ningún valor. No es posible tener ~ari~bles de tipo void. El tipo Sólo
~s un t'do asociado con métodos en los que void simplemente s1gmfica que un método no devolve ,
uene sen 1 ra
un valor.

Los métodos se pueden sobrecargar. Dos métodos con· diferentes listas de parámetros pueden tener
el mismo nombre.

void es un tipo de datos que no _tiene ningún valor.

8.3.1. Llamada a un método


Los métodos, para poder ser ejecutados, han de ser llamados o invocados. Cualquier expresión puede
contener una llamada a un método que redirigirá el control del programa al método nombrado.
Normalmente la llamada a un método se realizará desde un método de otra clase, desde el método
principal main () , aunque naturalmente también podrá ser desde un método de la misma clase.

Nota
El método .que llama a otro método es el invocador y el método controlado se denomina invocado.

El método llaI?ado recibe el control del ~rograma~ se ejecuta desde el principio y cuando termina (se
alcanza la sent~nc1a return, o la llave de cierre(}) s1 se omite return) el control del programa vuelve
y retorna al metodo llamador. ·
La llamada a un método
/ . desde
. otro de la misma clase y para el llll·smo ob'~eto se rea¡·iza escn·b·1endo
e1nombre y entre parentes1s la hsta de argumentos actuales Por eJ·e ¡
• mp o, sea 1a case
1 Semana
class Semana
{
public void listado(int horas)
{
int dia;
dia = diaSemana():
// ...
}

int diaSemana () { ... }


}

Semana nueva= new Semana();


nueva.listado(23);

La ejecución del método listado () supone la lla d /


y para el mismo objeto. ª
ma al metodo diasema·na () de la misma clase
Métodos 249
La llamada a un mét0 d0 d •
bre del , .
y el nom
esde un objeto se realiza con el nombre del objeto
metodo con sus argumentos actuales. , el se1ec tor punto ( • )

objet o.no mbre Meto do(li sta de argum entos actua les);
Los métodos s ta ti d
e e una c1ase no son metod
, os de los . . que son métodos
obJetos de la clase sino
de la clase. Por esa razón la llamada a un método s ta ti e se hace
con el nombr~ de la clase, el selector
punto ( •) Y el nombre del método con sus argumentos actuales.

nomb reCla se.no mbre Meto do(li sta de argum entos actua
les);

Precauc,on
.,
No se puede definir un método dentro de otro. Antes de que aparez
ca el código de un método debe
aparecer la llave de cierre del método anterior.

EJEMPLO 8.2. En la clase Matem se define un método que calcula el factorial de un entero. ~l méto-
do es static y por consiguiente se invoca con el nombre de ésta: Matem
.factorzal( ). La
clase principal llama a factorial() para enteros de 1 a 15.

class Matero
{
stat ic long fact oria l (int n)
{
long P = l;
for (int i - 2; i<=n ; i++)
p *= i;
retu rn p;
}
/ / ...
}

class Calc uloF act


{
publ ic stat ic void main (Stri ng[] a)
{
fina l int M = lS;
fo r ( in t n = 1 ; i <= M; i +"+') = Mate m.fa ctori al(n) );
11 +
Syst em.o ut.pr intln (n +
}
}

8.4. ACCESO A MÉTODOS . ceso al método. El tipo de acceso


·r
para controlar el ac
Cada método tiene un tipo asociado que se ult~ izapr i vate o prote
cted .
puede estar ausente (no se espe cifica) ' pub i e'
. "d' que tenga acceso a la clase.
. ( ,, bl. co) se puede llamar por .cualqu ier co igo •
O Un método publ ic pu 1. e se llama por el sistema en tiempo
se declara publ ic, ya qu
El método main () , por eJemp1o,
de ejecución.
250 Programación en JAVA 2
o de la clase en
todo pr iv a te (pr iva do) sól o se puede llamar desde otro métod que se
O Un mé
define el método pri vad o. de la clase en
o ot ec ted (pr ote gido) se puede llamar desde otro método la clase en que el
O Un métod pr
otro método de las clases que her
edan de
método está definido y por cualquier lquier objeto de las clases pertenecique está
disponible en cua
definido el método. También está á def inido el método.
entes al
que la clase en que est
mismo paquete que significa
fica nin gún tipo de acc eso , se utiliza el acceso por defecto, ~: el
O Si no se especi
as las clases con ten idas en el mismo paquete, pero no es accesible ra
método es accesible a tod
de ese paquete.
-- -
declaran varias clases, tienen métodos con distintos niveles de acceso
EJEMPLO 8.3. En un paquete se
pa ck ag e do lm en;
pu bli c cla ss Pri me ra
{
{.:.}
pr i va te vo id go lia r ()
pu bli c do úb le ho rne ro( )
{
go lia r() ;
}
() {. .. }
pr ote cte d vo id jur es te
St rin g sa lu sti o () {... }
}
pu bli c cla ss Se gu nd a
{
pu bli c vo id ba lsa s()
{

().
Pri me ra P = new Pr im era
; // er ro r, el ~é tod o go lia r() es pr iva do
p. go lia r()
s l •
p. a us tio (); // co rre cto
, es ta en el mi sm o pa qu ete
}
}

(1 fin de l pa qu ete
im po rt do lm en .*;
pu bli c cla ss Pru eb a
{
St .
pu bli c sta tic vo id ma in( r1n g ar [])
{
Se ?un da st = new Se gu nd a() .
pt = new P . ' !!. cr ea un Ob J'e to
Pri me ra rim era ();
1 s t . ba 1 s as ( ) '. ¡ ¡ 11 amada co r .
ro( ); // 11a m re cta po r ten er ac ce so pu bl ico
pt. ho me a co rre cta po r ten e r ac ce so pú bl ico
pt .sa lu sti o( ). // errad or , el ac ce so es l
} ' e pa qu ete do lm en
}

OS A MÉTODOS
8.5. PASO DE ARGUMENT
método sen J ava p
Los argumentos se pasan a los or va
l
or. Se hace u .

( in t' flo at ... ) o la refere nci a al ob· t d
y s na cop ia del tipo de dat o primitivo
~e o e la clase o array e pas a al m ., t d
e O o. Lo s len gua jes de
Métodos 25 1 ·
. ,,
como Java .
Programac1on • · .
,, dos valore~ Illlc1ales. .
proporcionan un mecanismo .
meto de paso de parámetros para permittr dar a los
Algunos metodos no n .
,, do sea genera1·izado Es eces1tan parámetros, aunque s1,, la mayoóa. Los parámetros permiten que un
meto d .
datos y/o ser utilizado en· un b;;Ir, ~n método con parámetros puede operar sobre una gran variedad de
cuadrado del núm~ro 25: n numero de situaciones diferentes. Un método simple que devuelve el

int cuadrado ()
{
return 25*25·
'
}

Este método, si bien devuelve el ,, 1 .


embargo, si se modifica de modo qu ca culo previsto, en realidad no es útil por su limitación. Sin
al cuadrado, entonces cuadrado () e aclepte un parámetro cuyo valor sea el número que se desea elevar
sue e ser mucho más útil.
int cuadrado(i nt n)
{
return n*n;
}

Ahora cuadrado () devolver"a eI cuadrado de cualquier valor que se encuentra entre paréntesis.

Ejemplo
int x,y;

X -- cuadrado(lO ); // se pasa el valor 10; x es igual a 100


y -- cuadrado(l S); // se pasa el valor 15; x es igual a 225
y -- 5;
X = cuadrado (y) ; // se pasa el valor de y; x es igual a 25

Se suele denominar parámetro a la variable definida en el método y que tiene un valor cuando se
llama al método (a veces también se le conoce como parámetro formal) y argumento (a veces también
se le conoce como parámetro real) es el valor que se pasa al método cuando se invoca.

cuadrado(23 )

~
Pasa 23 como argumento
n recibe el valor 23
int cuadrado(i nt n)
{

,, tros no se 11·m1·tan a números ' sino que pueden ser cualquier expresión (tal
Los va1ores de 1os parame
como una variable) que evalúe el tipo. de valor a pasar.

EJ.:--e_m_p_l_o__---.,- - - - - - - - d - l l__a_r_e_n_u_n---:b~u-c-:le-u-:t~ili-:-.z-an~d-;o~u~n~a~v~a~n-;:.a~b~le:--:p:a:"f'.:a~d;:-et~e-=rm=in~a:r~el
El me todo por3 () se pue e am •
valor del parámetro.
~nt concador = l;
1 ntresultado= O;
While (contador<lO O)
{
Programaci ón en JAVA 2
252
resultad o+= unObjet o.por3(c ontador) ;
contador ++;
}

incluso unas expresiones más complejas tales como:


0

_ resultad o+= unObjet o.por3(c ontador+ resultad o*5);


1
_ resultad o+= unObjet o.por3(u nObjeto .por3(co ntador)) ;
2

_
8 5_1. Paso de paráme tros por valor
Paso por valor (tambi~n llamado,,paso Pº: copia) si~nifica que cuando Java co~pila el método y el
código que llama al metodo, el metodo recibe una copia de los valores de los parametro s. Si se cambia
- el valor de un parámetro variable local, el cambio sólo afecta al método y no tiene efecto fuera del
método. La Figura 8.1 muestra la acción de pasar un argumento por valor. La variable real (dirección en
memoria) i no se pasa, pero el valor de i, 6, se pasa al método receptor.
En la técnica de paso de parámetro por valor, el método receptor no puede modificar la variable del
método (parámetro pasado).

void calMetod o()


{
int i = 6;
metodo2 (i);
6
}

void
metodo2 (int n)
{
int k = 9; ;
n += k;
}

Figura 8.1. Paso de la variable ; por valor.

Nota
La manera de pasar par.., t J
se pasa es una referenc·ame ros
1 b•
en ava es por valor. Cuando se pasa un ob1eto realmente lo que
~ . ,, J ,
la co • ) . ,, d ia ~. o ~eto, esa re1erenc1a el metodo llamado no puede modificar la (pasa
pza ' 81 pue en modificarse lo8 d t • b d 1 Ob'
objetos podrán d1·fi ª os miem ro e ~eto. Los arrays en Java se consideran
' mo icarse los elementos del array, pero no la referencia a éste.
. Métodos 253
EJEMPLO 8.4. ~~d~odd
me -'C.. e la ~~~~:;: 7 :----:-= --:---- ------- ---
clase princi al -;-
tros por valor. Se p d p , PorValor, muestra el mecanismo de paso de para-
mod¡-t::
:1icación no •pued ue l'e cambiar .ª
l vana
• ble del parámetro
en el método, pero su
class PorValor esa ir al exterior.
{
public static .
{ void rnain(string [J a)
int n = 10 .
System.ou't.println"
demoLocal (n) ; ( Antes de l larnar a dernoLocal, n = 11 + n) ;
System out .
} • •Println ( "Después
de la llamada, n = 11 + n);
static void demoLocal( '
{ 1nt valor)
System.ou t.println("D ent
valor= 999. ro de dernoLocal, valor = JI
+ valor);
'
System.ou t.println("D entro
} de dernoLocal, valor = " + valor);
}

Al ejecutar este programa se visualiza la salida:

Antes de llamar. a demoLocal, n = 10


Dentro de DemoLocal, valor= 10
Dentro de DemoLocal, valor= 999
Después de la llamada, n = 10

EJEMPLO 8.5. El listado de la clase principal, PorValorO bjeto, muestra cómo se pasa la refe-
rencia de un objeto creado y pueden modificarse sus miembros dato.
class Julian
{
String fecha;
int dias;
Julian ()
{
fecha= 01-Jan-200 1";
11

dias = 1;
}
void mostrar()
{ 1 "+fecha+ "\t Dias = " + dias) ;
System.ou t.println(n Fecha actua:
}
// ...
}

class PorValorO bjeto


¡ public static void main(Strin g[l a)
{
1 clase Julian
// crea objeto de a
.
J ul ian . n _ new Julian(};
Ja - tuales
// muestra valores ac
Progra mació n en JAVA 2
254
en la crea ción .");
syste m.ou t.pri ntln( "Pro pied ades del obje to
.. jan.m ostra r();
// llam ada a méto do que mod ifica el obje to
•'

mod ifica (jan );


mod ifica do." );
syste m.ou t.pri ntln( "Pro pied ades del obje to
jan.m ostra r();
}

stati c void mod ifica (Juli an ~~)


-~
{
¡¡ se mod ifica n las vari able s insta ncia de -0~

p.fec ha = "01- Feb- 2001 ";


p.dia s = 32;
)
)

Al ejecu tar este progr ama se visua liza la salida:

Prop iedad es del obje to en la crea ción .


Fech a actu al: 01-J an-2 001 Dias = 1
Prop iedad es del obje to mod ifica do.
Fech a actu al: 01-F eb-2 001 Dias = 32

8.5.2. Lista de pará metr os múltiples


pued e decla rar una lista de parámetros en
Un método puede tener cualq uier número de parám etros, y se
es simpl emen te una secuencia de ellos
lugar de un único parámetro. En este caso la lista de parám etros
ningú n parám etro modi fique su valor, o
separada por coma s, con el modi ficado r fina l si se desea que
sin el modificador fina l en caso contrario.

Ejemplo
doub le grl( fina l doub le a, fina l doub le b)
{
retu rn (a*1 5)-(b *25) ;
}

Regla ;.,~ ~~= -c--


:;,= ~~T "'~~ ~~~ ""'-~ :;-~ ~~~ ;#~~' \ ~ '

tud es uno, mientras que


Un n_iétodo que tiene un so}o parámetro se dice que •su tamaño O longi
una hsta de parámetros vac1.a es 'una lista de tamafl'o cero.

d · t· corres-
Todo.s los parám
,, etros .deben de tener un tipo deter mina do , de modo qu e h a e ex1s 1r una
les (pará metro s O argum entos ) con el
p?nde nc1a _en nume ro y !1po de datos de _los parám etros forma
da al méto do.
nume ro y tipo de los param etros reales existe ntes en la llama

grl( S.40 ,6.2 5); llamada correcta a grJ


grl( S,6, 0.25 ); llamada no válida a grJ
Métodos 255
►• '

8•5 •3• Modificadores de a cceso


1

Dentro del cuerpo del métod 1 ,


si se desea que el valor paº ed parametro_o argumento se utiliza como cualquier variable, de mo?o que
parámetros al nombre del pa~:m:t~ la variable no se cambie será preciso que en la declaración de
0
se anteceda con la palabra reservada final.
double polinomio2(fin 1 d
{ a ouble x)
return x*x + x* 2 -S.O;
}

La palabra reservada fina 1 hace ·d


. icializada. Si final no est, que e1 valor de x no se pueda modificar después que haya s1 o
;odificar dentro del cuerpo d:ire~ente en la dec~~ración,_ entonces el valor del parámet~o se puede
, metodo. La elecc1on del tipo de parámetro debe ser realizada por el
programador segun e1 contexto en que se ejecute el método.

8.6. MÉTODOS ABSTRACTOS

Los métodos abS tractos se utilizan en clases abstractas para imponer una cierta funcionalidad a las
subclases de las. clases abstractas. Los métodos abstractos se designan por la palabra reservada
abstract y no tienen cuerpo.
La implementación de los métodos abstractos se deja a las subclases. Por ejemplo, en una clase
Figura se definen los métodos abstractos calcularArea () y perimetro () que devuelven el área Y
el perímetro del objeto Figura. Las subclases Circulo y Rectangulo se pueden definir como sub-
clases de Figura. Ya que el área de un rectángulo y de un círculo se calcula utilizando fórmulas mate-
máticas diferentes, las clases Rectangulo y Circulo proporcionarán sus propias implementaciones de
los métodos calcularArea () y perimetro () .
Definición de los
métodos abstractos
calcularArea()
perimetro ()

Implementación de los
métodos abstractos
calcularArea ()
perimetro ()

. l l l ,rea y el perímetro de las figuras geomé-


EJEMPLO 8.6. El programa PruebaF1.gura ca c~a. e f
entación de las clases y métodos abs-
im; _em a se encuentra en el paquete figuras.
tricas Circulo y Rectangulo.
tractos de la jerarquía cuya superclase es i gur
import figuras.*;

public class PruebaFigura


{
public static void main(S t ring ar[])
{ • / objeto Rectangulo
angulo(7.0,9.0) ;/ .
Rectangulo r = new Rec t // objeto Circu 10
Circulo c = new Circulo (2.0); , 1 esª+
, del rectangu 0
Syscern.out.println(ªEl area
Programación en JAVA 2
266
r.calcularArea() +
el perimetro que tiene ll +
ll\t

r.perimetro());
system.out.println(ll El área del círculo es ll +
c.calcularArea() +
ll\t el perímetro que tiene ll +
c. perimetro ·() ) ;
}
}

8 _7. SOBRECARGA DE MÉTODOS


En Java es posible definir dos o más métodos dentro de la misma clase que compartan el mismo nombre
y que las declaraciones de sus parámetros sean diferentes. En este caso se dice que los métodos están
sobrecargados y el fenómeno se conoce como sobrecarga de métodos. La sobrecarga es uno de los
procedimientos mediante el cual Java implementa el polimorfismo.
En las llamadas a los métodos sobrecargados, el compilador determina cuál es el método invocado
basándose en el número o tipo de argumentos pasados. Por consiguiente, los métodos sobrecargados
deben diferir en el número o tipo de sus parámetros. Cuando Java encuentra una llamada a un método
sobrecargado, ejecuta la versión del método cuyos parámetros (número y tipo) coinciden con los
argumentos utilizados en la llamada.

.·. ,_. .,. ,_. _ . .,. ,.,., . , -~---·:" ~ .. ~:: ~r:.:~;:~:7~·, --'.7 7~ ,~~ -; ~z /; ·: ·- ·:, 7:-.:.: •- J~tii i -· -
•i F~

' '. A ~~ •!~... . . f Í. • • -· i_ • ; a ;• ~ Í •"J; ti . _j 1


un m _sobrecargado no debe ser ambigua, de modo que el compilador pueda V
: . vocamente cuál es el método llamado. ... . ... _ • _, ., •·t-' -~ •• , 1 - • • -e
. - ~~ ~., - ~

· l;.,v:,.;,:¡;~~~~~-;~; •,:~,,~:--~-~""~-·,.,-~- ,.,., -· >c~\~~~~~----~...i~,~-,-~~~.•.L~~-~-~----~-,;,~~-•••·•L~¡~;:_1~~(.~i~~N;~'•

EJEMPLO 8.7. -Se define una clase con cuatro métodos sobrecargados, prueba(), diferenciándose
uno de otro por el número/tipo de los parámetros. En el método main() se llama a
cada uno de. los métodos.
El método p~ueba ( ) se ha sobrecargado cuatro veces. La primera versión no tiene parámetros; la
s_egunda tiene un parámetro entero; la tercera tiene dos parámetros enteros y' la cuarta tres parámetros de
tipo double .

. class Sobrecarga
' {
public void prueba()
{
System.out.println(ll Método sin argumentos.#);
}

// Sobrecarga·de prueba() con un parámetro tipo int


public void prueba(int x)
{
System.out.print(ll
. . Métqdo
, con 1 arg umen t o. ") ,·
System.out.println(" x = + x ); 11

// Sobrecarga de prueba() con dos parámetro tipo int


Métodos 257
pub lic voi d
{ Pru eba (in t X, int y)
Sys tem 0
S t • ut. pri nt( " M~ do con 2 arg um ent os. "),·
ys em .ou t •pr·int ln( " eto
x _ " .
} - +X +" ; y = " + y)¡
// S
obr eca rga de Pr.u eba () c
_on tre s par ám etro s
pub lic voi d
ble
{. Pru eba (do ubl e x, dou ble y, dou z)
Sys tem out Pri. nt (" Mét .
• • 3 arg um ent os. ,, ) ;
Sy ste m. out .pr int ln( " odo con
X == " +
";y ::: "+ X+
} Y+ "·I z ::: '\ + z);
}
// cla se con el mét odo mai n ()

cla ss Dem oSo bre car g a


{
pub lic sta tic voi d ma in( Str ing []a r)
{

Sob rec arg a obJ' e t O == new Sob rec arg a() .
// 11 ma d a a los ~t d '
ª
ob jet o.p rue ba( ); me ~ os sob rec arg ado s

obj eto .pr ueb a(2 9).


ob jet o.p rue ba( 21 ,i 9 ).
);
ob jet o.p rue ba( -2. S,l ~.o ,s.1
}
}
va) la e1ecución (J. ava Sob rec arg a) da lugar a
Una vez compilado ( j ava c Sob rec arg a.ja J
esta salida:
Mé tod o sin arg um ent os
Mé tod o con 1 arg um ent o. X = 29
Mé tod o con 2 arg um ent os. X = 21·I y = 19
Mé tod o con 3 arg um ent os. X = -2. 5; y = 10. 0; z = 5.1

s
8.7.1. Sobrecarga de constructore
a un con jun to de objetos con las mismas propiedades y comportamiento. El objeto
La clase describe tidos en el
do es creado se inic ializa con uno s valo res por defecto, o bien con unos valores transmi
cuan ctor. Éste
realiza la inicialización del objeto es el constru
~omento de la instanciación. El método que '
e tipo de retorno.
tiene el rnismo nombre que la clase y no tien rgar los constructores.
normales, se pueden sobreca
Además de la sobrecarga de métodos es,
en la may oría de las clases que se crean en programas se sobrecargan los constructor
Nonnalmente y entonces
no es una reg la obl igat oria . Inc luso -una clase puede definirse sin constructor
~un que · • .
sin argumentos.
llllplícitamente queda definido un constructor

argumentos,
MP LO 8.8 . Se define la clas e Rac ional con tres constructores sobrecargados; uno sin
' EJE tercero con un argumento que es 'un objeto Racional.
otro con dos arg ume ntos y un
entero. El
tener un numerador y un denominador de tipo
Los números racionales se caracterizan por núm ero racional o/ 1. El constructor con dos
argum ento s inic iali za el obj eto al
constructor sin
n en JAVA 2
Programació
258
1 dor y denominador respectivamente. El terc er
teros es para inicia. lizar e nume ra
umentos en • 'd
arg . ·cializa el obieto al obJeto transm1t1 o.
constrUctor 1n1 J

clas s Raci onal


{
priv ate int num erad or, deno mina dor;

pub lic Rac iona l()


{
num erad or= O;
deno mina dor= 1;
}
mina dor)
pub lic Rac iona l(in t num erad or, int deno
{
this. num erad or = num erad or;
this. deno min ador = deno mina dor;
}
pub lic Rac iona l(Ra cion al r)
{
num erad or= r.nu mer ador ;
deno mina dor= r.de nom inad or;
}
pub lic Raci onal sum ar(R acio nal r2)
{
+ r2.n ume rado r,
Raci onal sum a= new Raci onal (num erad or
deno mina dor+ r2.d enom inad or);
retu rn suma ;
}
les
// méto dos para oper ar con núm eros raci ona

pub lic void mos trar ()


{
inad or);
Syst em.o ut.p rintl n(nu mer ador +· "/ll +de nom
}
}

ructor u otro según coino se desee


.. :\:. crear objetos Racional se puede hacer uso de un constpor pantalla. ' .
1n1c1a izar. ~n este programa se crean objetos y se muestran
clas s Dem oRac ional
{
rubl ic stat ic void main (Str ing (] a)
Raci onal rl,r2 ,r3;
rl = new Rac iona l(); // crea núm ero raci ona l 0/1
r2 = new Rac1o • nal( l,S); //
rl = new Rac iona l(r2) ; crea núm ero raci ona l 1/5
r3 = r2.s uma r(rl) ; // crea raci ona l igua l que r2
Syst em. out. prin t("rl = "); rl 5t
Syst em. out. prin t ( "r2 = ") .. 2 • mo rar () ;
Syst em.o ut.p rint~ "rl+ r 2 ='"~'·.mo stra r();
r3.m ostr ar() ;
}
}
Métodos 259
s.s. ÁMBITO (ALCANCE)

El ámbito o alcance de .
Si un método reco una vanable determina cuál 1 ,, . •
• noce una variable 1 . es .s?n os metodos que reconocen ciertas vanables.
pr~gr;ma :~ el que es visible una vari ~lv~able es v1s1ble en ese método. El ámbito es la zona de un
m !º o y .oq~~- Se puede desi nar: e. n_Java se pueden considerar tres tipos de ámbitos: de clase,
van.~~~e es 1nv1s1ble fuera de su ~mbit;a v~nable para que esté asociada a uno de estos ámbitos. Tal
pos1c1on de la sentencia que declara a la~ s~lo se puede acceder a ella en su ámbito. Normalmente la
anable en el programa determina el ámbito.

s.8.1. Ámbito de la clase

Las variables instancia declarad •


· as en una clase tie ,, b'
ser ref erenc1adas por cualquier m "'t d nen am 1to de todos los métodos de la clase. Pueden
• bl 1 b 1
vana es g o a es a la clase. e O O en la clase co
1 · 1 • •
mp eta, ta es vanables se pueden considerar
l
Ejemplo
class Radio
{
int numSintonias·
int potencia; '
double precio;
String marca;
,. public void muestra ()
{
System.out.println(marca);
System.out.println("Sintonias "+ numSintonias);
¡·
/ / ...
}
//
1 }

Todos los métodos de la clase Radio pueden hacer uso libremente de las variables de la clase,
independientemente del lugar (dentro de la clase) en que aparezca la sentencia de declaración. De otro
modo, el ámbito de las variables instancia de una clase va desde la llave de apertura ( {) a la llave de
cierre (}) .
Las variables instancia o variables de clase son automáticamente inicializadas por el compilador. •
Las variables de clase de t_ipo numérico (int, f loat, double) se inicializan a cero, las variables de
tipo booleana false. Las variables cuyo tipo es una clase, las variables array ,·yen general las
referencias a objetos, se inicializan a null.
Programación en JAVA 2
260
Ámbito de método
s.s.2.
. ble que tiene ámbito de método se puede referenciar desde cualquier parte d 1 ;
Una. vana declaradas dentro del cuerpo . de1 meto ,, do se d.ice que son locales al métod e Lmetod?· Las
1
vanab es e pueden utilizar fuera del ámbito del método en que están definidas º· as variables
locales no ~ ables declaradas entre la llave de apertura ( { ) y la llave de cierre ( }) ·del cue
ámbito del método. Tamb.,,
,,
1en 1os 1.dentlºfi1cadores de 1os parametros formales tiene
rpo del m,
. Las van , etodo
uenen e1 u<totalidad. n como ambito
el método en s

Ejemplo
double producto(double v[], int n)
{
int k;
double p = 1.0;
for (k = O; k< n; )
{
p *= v[k];
k += 2;
}
return p;
}

En product~ () las vari_ables ~ y p están d~claradas en el cuerpo del método y por tanto se pueden
utilizar en cualqmer sentencia de este. Los parametros v (referencia de un array) y n tienen también
como ámbito el método.
Al estar definidos los métodos dentro de las clases puede ocurrir que variables instancia de fa clase
coincidan con el nombre de una variable definida dentro del método, en cuyo caso la variable en el
ámbito del método oculta a la variable instancia de la clase.

Ejemplo
public class Mixto
{
prívate int n;
public double valor()
{
float n = 12.0f; // oculta a la variable int n de ámbito
//la clase
//
}
}
E 1 1 • , b' 1 lase· todos los métodos
_n acaseM1xto, nesunavariabledeti ointquetienecomoam ito_ac ' . ofloat· en
~:~~;~~ :ttad~ndacceder a n • En el método ~alor () se ha d_efi
nid01 :~:~::fi~~~;en su ámbito.
ª
e tipo f loat la que prevalece frente ande tipo int P0

Regla
Las variables definidas dent ,, . . . . d s or el compilador de Java. Es un
error de compila . ,, ro de un metodo no son in1c1ahza ~ pdO 8in haber sido inicializada.
cion acceder al valor de una variable de un rneto

También podría gustarte