La sentencia 4
(public static final double pi=3.
14159265358979323846,-) define también una variable static. pero contiene una palabra nueva: final. Una variable final
tiene como característica el que su valor 110 puede ser modificado, o lo que es lo mismo,
es una constante. Es muy lógico definir el número n como constante, y también es razonable que sea
una constante static de la clase Circulo, de forma que sea compartida por todos los métodos y
objetos que se creen. La sentencia 5 (public double x, y, r,-) define las variables miembro ele objeto,
que son las coordenadas del centro y el radio del círculo.
La sentencia 6-9
define el constructor general de la clase Circulo. E11 este caso tiene una peculiaridad y es que el nombre de los argumentos (x, y, /•) coincide con el
nombre de las variables miembro. Esto es un problema, porque como se verá más adelante los argumentos
de un método son variables locales que sólo son visibles dentro del bloque {...} del método,
que se destruyen al salir del bloque y que ocultan otras variables de ámbito más general que tengan
esos mismos nombres. E11 otras palabras, si en el código del constructor se utilizan las
variables (x, j. /•) se está haciendo referencia a los argumentos del método y 110 a las variables miembro.
La sentencia 7 indica cómo se resuelve este problema. Para cualquier método no static de una
clase, la palabra this es una referencia al objeto -el argumento implícito- sobre el que se está
aplicando el método. De esta forma, this.x se refiere a la variable miembro, mientras que .v es el
argumento del constructor.
Las sentencias
10-12 representan otros tres constructores de la clase (métodos sobrecargados), que se diferencian en el número y tipo de argumentos. Los tres tienen en común
el realizar su papel llamando al constructor general previamente definido, al que se liace
referencia con la palabra this (en este caso el significado de this no es exactamente el del argumento
implícito). Al constructor de la sentencia 10 sólo se le pasa el radio, con lo cual construye un círculo con
ese radio centrado en el origen de coordenadas. Al constructor de la sentencia 11 se le pasa otro objeto
de la clase Circulo. del cual saca una copia. El constructor de la sentencia 12 es un constructor
por defecto, al que no se le pasa ningún argumento, que crea un círculo de radio unidad centrado en el
origen.
Las sentencias 13 y
14 definen los métodos perimetro() y areaQ. declarados como abstract en la clase Geometría, de modo adecuado para los círculos.
Las sentencias 16-18 definen elMayorQ. que es 1111 método de objeto para comparar
círculos.
Uno de los círculos le llega como argumento implícito y el otro como argumento
explícito. En la sentencia 17 se ve cómo al radio del argumento implícito se
accede en la forma this.r (se podría acceder también simplemente con r. pues no hay ninguna variable local que la
oculte), y al del argumento explícito como c.r. donde c es el nombre del objeto pasado como
argumento. La sentencia return devuelve una referencia al objeto cuyo radio sea mayor. Cuando
éste es el argumento implícito se devuelve this.
Las sentencias
20-22 presentan la definición de otro método elMayorf). que en este caso es un método de clase (definido como static). y por tanto 110 tiene argumento implícito. Los dos objetos a comparar se deben pasar como argumentos explícitos, lo que hace el código muy
fácil de entender. Es importante considerar que en ambos casos lo que se devuelve como valor de
retomo 110 es el objeto que constituye el mayor círculo, sino una referencia (un nombre, por
decirlo de otra forma).
No hay comentarios:
Publicar un comentario