⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 java3.htm

📁 E-books about Java Programing in Spanish
💻 HTM
📖 第 1 页 / 共 2 页
字号:
<HTML>
<HEAD>
<TITLE>Java desde Cero</TITLE>

<META NAME="GENERATOR" CONTENT="Internet Assistant for Microsoft Word 2.0z">
</HEAD>
<BODY background=/iconos/1.gif  TEXT=000000 LINK=FF0000 VLINK=A62A2A>
<H1>Estructura de clases<BR>
</H1>
<P>
Vamos a comenzar analizando la clase Contador, para ir viendo
las partes que forman una clase una por una y en detalle. Este
cap&iacute;tulo va a ser un poco aburrido por lo exhaustivo (aunque
algunos puntos m&aacute;s complicados como las excepciones y los
threads los dejaremos para despu&eacute;s), pero me parece bueno
tener un resumen completo de la sintaxis desde ahora.
<P>
Luego iremos armando peque&ntilde;as aplicaciones para probar
cada cosa.<BR>
<P>
Recordemos la definici&oacute;n de la clase Contador:<BR>
<PRE WIDTH=132>
<FONT SIZE=2>// Implementaci&oacute;n de un contador sencillo
public class Contador {
// Atributos
int cnt;	
// Constructor
public Contador() {
cnt = 0;
}
// M&eacute;todos
public int incCuenta() {
cnt++;
return cnt;
}
public int getCuenta() {
return cnt;
} 
}<BR>
</FONT>
</PRE>
<H2>Declaraci&oacute;n de la clase</H2>
<P>
La clase se declara mediante la l&iacute;nea <FONT FACE="Arial">public
class Contador</FONT>. En el caso m&aacute;s general, la declaraci&oacute;n
de una clase puede contener los siguientes elementos:<BR>
<P>
[<B>public</B>] [<B>fina</B>l | <B>abstract</B>] <B>class</B>
Clase [<B>extends</B> ClaseMadre] [<B>implements</B> Interfase1
[, Interfase2 ]&#133;]<BR>
<P>
o bien, para interfaces:<BR>
<P>
[<B>public</B>] <B>interface</B> Interfase [<B>extends</B> InterfaseMadre1
[, InterfaseMadre2 ]&#133;]<BR>
<P>
Como se ve, lo &uacute;nico obligatorio es <B>class</B> y el nombre
de la clase. Las interfases son un caso de clase particular que
veremos m&aacute;s adelante.
<H3>Public, final o abstract</H3>
<P>
Definir una clase como p&uacute;blica (<B>public</B>) significa
que puede ser usada por cualquier clase en cualquier paquete.
Si no lo es, solamente puede ser utilizada por clases del mismo
paquete (m&aacute;s sobre paquetes luego; b&aacute;sicamente,
se trata de un grupo de clases e interfaces relacionadas, como
los paquetes de biblioteca inclu&iacute;dos con Java).
<P>
Una clase final (<B>final</B>) es aquella que no puede tener clases
que la hereden. Esto se utiliza b&aacute;sicamente por razones
de seguridad (para que una clase no pueda ser reemplazada por
otra que la herede), o por dise&ntilde;o de la aplicaci&oacute;n.
<P>
Una clase abstracta (<B>abstract</B>) es una clase que puede tener
herederas, pero no puede ser instanciada. Es, literalmente, abstracta
(como la clase <I>Number</I> definida en java.lang). &#191;Para
qu&eacute; sirve? Para modelar conceptos. Por ejemplo, la clase
<I>Number</I> es una clase abstracta que representa cualquier
tipo de n&uacute;meros (y sus m&eacute;todos no est&aacute;n implementados:
son abstractos); las clases descendientes de &eacute;sta, como
<I>Integer</I> o <I>Float</I>, s&iacute; implementan los m&eacute;todos
de la madre <I>Number</I>, y se pueden instanciar. 
<P>
Por lo dicho, una clase no puede ser <B>final</B> y <B>abstract</B>
a la vez (ya que la clase abstract requiere descendientes&#133;)
<P>
&#191;Un poco complejo? Se va a entender mejor cuando veamos casos
particulares, como las interfases (que por definici&oacute;n son
abstractas ya que no implementan sus m&eacute;todos).
<H3>Extends</H3>
<P>
La instrucci&oacute;n <B>extends</B> indica de qu&eacute; clase
desciende la nuestra. Si se omite, Java asume que desciende de
la superclase <B>Object</B>.
<P>
Cuando una clase desciende de otra, esto significa que hereda
sus atributos y sus m&eacute;todos (es decir que, a menos que
los redefinamos, sus m&eacute;todos son los mismos que los de
la clase madre y pueden utilizarse en forma transparente, a menos
que sean <I>privados</I> en la clase madre o, para subclases de
otros paquetes, protegidos o propios del paquete). Veremos la
calificaci&oacute;n de m&eacute;todos muy pronto, a no desesperar!
<H3>Implements</H3>
<P>
Una interfase (<B>interface</B>) es una clase que declara sus
m&eacute;todos pero no los implementa; cuando una clase implementa
(<B>implements</B>) una o m&aacute;s interfases, debe contener
la implementaci&oacute;n de todos los m&eacute;todos (con las
mismas listas de par&aacute;metros) de dichas interfases.
<P>
Esto sirve para dar un ascendiente com&uacute;n a varias clases,
oblig&aacute;ndolas a implementar los mismos m&eacute;todos y,
por lo tanto, a comportarse de forma similar en cuanto a su interfase
con otras clases y subclases.
<H3>Interface</H3>
<P>
Una interfase (<B>interface</B>), como se dijo, es una clase que
no implementa sus m&eacute;todos sino que deja a cargo la implementaci&oacute;n
a otras clases. Las interfases pueden, asimismo, descender de
otras interfases pero no de otras clases.
<P>
Todos sus m&eacute;todos son por definici&oacute;n abstractos
y sus atributos son finales (aunque esto no se indica en el cuerpo
de la interfase).
<P>
Son &uacute;tiles para generar relaciones entre clases que de
otro modo no est&aacute;n relacionadas (haciendo que implementen
los mismos m&eacute;todos), o para distribuir paquetes de clases
indicando la estructura de la interfase pero no las clases individuales
(objetos an&oacute;nimos).
<P>
Si bien diferentes clases pueden implementar las mismas interfases,
y a la vez descender de otras clases, esto no es en realidad herencia
m&uacute;ltiple ya que una clase no puede heredar atributos ni
m&eacute;todos de una interface; y las clases que implementan
una interfase pueden no estar ni siquiera relacionadas entre s&iacute;.
<BR>
<H2>El cuerpo de la clase</H2>
<P>
El cuerpo de la clase, encerrado entre { y }, es la lista de atributos
(variables) y m&eacute;todos (funciones) que constituyen la clase.
<P>
No es obligatorio, pero en general se listan primero los atributos
y luego los m&eacute;todos.
<H3>Declaraci&oacute;n de atributos</H3>
<P>
En Java no hay variables globales; todas las variables se declaran
dentro del cuerpo de la clase o dentro de un m&eacute;todo. Las
variables declaradas dentro de un m&eacute;todo son <B>locales</B>
al m&eacute;todo; las variables declaradas en el cuerpo de la
clase se dice que son <I>miembros</I> de la clase y son accesibles
por todos los m&eacute;todos de la clase.
<P>
Por otra parte, adem&aacute;s de los atributos de la propia clase
se puede acceder a todos los atributos de la clase de la que desciende;
por ejemplo, cualquier clase que descienda de la clase <B>Polygon</B>
hereda los atributos <I>npoints</I>, <I>xpoints</I> e <I>ypoints</I>.
<P>
Finalmente, los atributos miembros de la clase pueden ser <I>atributos
de clase</I> o <I>atributos de instancia</I>; se dice que son
atributos <I>de clase</I> si se usa la palabra clave <B>static</B>:
en ese caso la variable es &uacute;nica para todas las instancias
(objetos) de la clase (ocupa un &uacute;nico lugar en memoria).
Si no se usa static, el sistema crea un lugar nuevo para esa variable
con cada instancia (o sea que es independiente para cada objeto).
<P>
La declaraci&oacute;n sigue siempre el mismo esquema:<BR>
<P>
[<B>private</B>|<B>protected</B>|<B>public</B>] [<B>static</B>]
[<B>final</B>] [<B>transient</B>] [<B>volatile</B>] Tipo NombreVariable
[<B>=</B> Valor]<B>;</B>
<H3>Private, protected o public</H3>
<P>
Java tiene 4 tipos de acceso diferente a las variables o m&eacute;todos
de una clase: privado, protegido, p&uacute;blico o por paquete
(si no se especifica nada).
<P>
De acuerdo a la forma en que se especifica un atributo, objetos
de otras clases tienen distintas posibilidades de accederlos:
<BR>

<TABLE BORDERCOLOR=#000000 BORDER=1>
<TR><TD WIDTH=132><I>Acceso desde:</I></TD><TD WIDTH=85><CENTER><B>private</B></CENTER>
</TD><TD WIDTH=85><CENTER><B>protected</B></CENTER></TD><TD WIDTH=94><CENTER><B>public</B></CENTER>
</TD><TD WIDTH=83><CENTER>(package)</CENTER></TD></TR>
<TR><TD WIDTH=132>la propia clase</TD><TD WIDTH=85><CENTER>S</CENTER>
</TD><TD WIDTH=85><CENTER>S</CENTER></TD><TD WIDTH=94><CENTER>S</CENTER>
</TD><TD WIDTH=83><CENTER>S</CENTER></TD></TR>
<TR><TD WIDTH=132>subclase en el mismo paquete</TD><TD WIDTH=85><CENTER>N</CENTER>
</TD><TD WIDTH=85><CENTER>S</CENTER></TD><TD WIDTH=94><CENTER>S</CENTER>
</TD><TD WIDTH=83><CENTER>S</CENTER></TD></TR>
<TR><TD WIDTH=132>otras clases en el mismo paquete</TD><TD WIDTH=85><CENTER>N</CENTER>
</TD><TD WIDTH=85><CENTER>S</CENTER></TD><TD WIDTH=94><CENTER>S</CENTER>
</TD><TD WIDTH=83><CENTER>S</CENTER></TD></TR>
<TR><TD WIDTH=132>subclases en otros paquetes</TD><TD WIDTH=85><CENTER>N</CENTER>
</TD><TD WIDTH=85><CENTER>X</CENTER></TD><TD WIDTH=94><CENTER>S</CENTER>
</TD><TD WIDTH=83><CENTER>N</CENTER></TD></TR>
<TR><TD WIDTH=132>otras clases en otros paquetes</TD><TD WIDTH=85><CENTER>N</CENTER>
</TD><TD WIDTH=85><CENTER>N</CENTER></TD><TD WIDTH=94><CENTER>S</CENTER>
</TD><TD WIDTH=83><CENTER>N</CENTER></TD></TR>
</TABLE>
<P>
<P>
S: puede acceder
<P>
N: no puede acceder
<P>
X: puede acceder al atributo en objetos que pertenezcan a la subclase,
pero no en los que pertenecen a la clase madre. Es un caso especial
; m&aacute;s adelante veremos ejemplos de todo esto.
<H3>Static y final</H3>
<P>
Como ya se vio, <B>static</B> sirve para definir un atributo como
<I>de clase</I>, o sea &uacute;nico para todos los objetos de
la clase.
<P>
En cuanto a <B>final</B>, como en las clases, determina que un
atributo no pueda ser sobreescrito o redefinido. O sea: no se
trata de una variable, sino de una <I>constante</I>.
<H3>Transient y volatile</H3>
<P>
Son casos bastante particulares y que no hab&iacute;an sido implementados
en Java 1.0.
<P>
<I>Transient</I> denomina atributos que no se graban cuando se

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -