Você está na página 1de 6

Material Didáctico de la Asignatura de Programación II

Modificadores de Acceso – Clase Scanner – Uso del this


Elaborado: Msc Lesbia Valerio Lacayo

Modificadores de acceso

public, private, protected y default

Los modificadores de acceso, como su nombre indica, determinan desde qué clases se
puede acceder a un determinado elemento. En Java tenemos 4 tipos: public, private,
protected y el tipo por defecto, que no tiene ninguna palabra clave asociada, pero se suele
conocer como default o package-private.

Si no especificamos ningún modificador de acceso se utiliza el nivel de acceso por defecto,


que consiste en que el elemento puede ser accedido sólo desde las clases que pertenezcan
al mismo paquete.

El nivel de acceso public permite a acceder al elemento desde cualquier clase,


independientemente de que esta pertenezca o no al paquete en que se encuentra el
elemento.

private, por otro lado, es el modificador más restrictivo y especifica que los elementos que
lo utilizan sólo pueden ser accedidos desde la clase en la que se encuentran. Este
modificador sólo puede utilizarse sobre los miembros de una clase y sobre interfaces y
clases internas, no sobre clases o interfaces de primer nivel, dado que esto no tendría
sentido.

Es importante destacar también que private convierte los elementos en privados para
otras clases, no para otras instancias de la clase. Es decir, un objeto de una determinada
clase puede acceder a los miembros privados de otro objeto de la misma clase, por lo que
algo como lo siguiente sería perfectamente válido:

El modificador protected, por último, indica que los elementos sólo pueden ser accedidos
desde su mismo paquete (como el acceso por defecto) y desde cualquier clase que
extienda la clase en que se encuentra, independientemente de si esta se encuentra en el
mismo paquete o no. Este modificador, como private, no tiene sentido a nivel de clases o
interfaces no internas.
Los distintos modificadores de acceso quedan resumidos en la siguiente tabla:

Modificadores de acceso
La misma Otra clase del mismo Subclase de otro Otra clase de otro
clase paquete paquete paquete
public X X X X
protected X X X
default X X
private X

static

A pesar de lo que podría parecer por su nombre, heredado de la terminología de C++, el


modificador static no sirve para crear constantes, sino para crear miembros que
pertenecen a la clase, y no a una instancia de la clase. Esto implica, entre otras cosas, que
no es necesario crear un objeto de la clase para poder acceder a estos atributos y
métodos. Este es el motivo por el cual es obligatorio que main se declare como static; de
esta forma no tenemos que ofrecer un constructor vacío para la clase que contiene el
método, o indicar de alguna forma a la máquina virtual cómo instanciar la clase.
La clase Scanner

La clase Scanner permite crear objetos capaces de leer información desde una fuente de
datos que puede ser un archivo, una cadena de caracteres, el teclado, etc. Los objetos de
esta clase, serán los que utilizaremos para pedir los datos que se requieran para dar
solución a un problema.
Scanner es una de las clases que nos permite leer entradas de teclado por consola:

Para hacer uso de esta clase, lo primero que se debe hacer es importarla

importjava.util.Scanner;

Pero resulta algo tedioso de memorizar el BufferedReader.Tomando en cuenta lo anterior


la gente de Sun ha creado una nueva clase, que permite con un par de líneas realizar la
misma tarea.

Utilizando la clase Scanner es posible leer los datos ingresados por el usuario desde
teclado, para ello debemos utilizar el objeto de entrada por defecto(System.in). El método
nextInt() toma lo digitado por el usuario y lo convierte en un número entero (existen varios
métodos next… para cada tipo de dato primitivo de Java y para algunos tipos de datos
compuestos, como cadena de caracteres).También para la salida de datos, con formato,
existe un nuevo método printf. Éste método permite entre otras cosas:

 Redondeo de los decimales de un número.


 Alineación de números en columnas

 Justificación izquierda y derecha

 Representación de números en formato exponencial.

 Mostrar fecha y hora en varios formatos.

La utilización de la clase Scanner es muy sencilla. Lo primero que tenemos que hacer es
declarar un objeto Scanner instanciándolo contra la consola, es decir, contra el objeto
System.in

 Scanner reader = new Scanner(System.in);


Métodos de la clase Scanner:

Int nextInt() double nextDouble() boolean nextBoolean()

byte nextByte() float nextFloat()

short nextShort()

long nextLong()

String: nextLine() Toda la cadena del nombre con espacios en blanco

next() Solo una cadena sin espacios en blanco

Una dificultad se presenta si llamamos al método nextLine() y previamente hemos llamado


al método nextInt(), esto debido a que luego de ejecutar el método nextInt() queda
almacenado en el objeto de la clase Scanner el caracter "Enter" y si llamamos
inmediatamente al método nextLine() este almacena dicho valor de tecla y continúa con el
flujo del programa. Para solucionar este problema debemos generar un código similar a:

Si se desea colocar después de un entero o float o double.

System.out.println("Nombre:");
entrada.nextLine();
nombre=entrada.nextLine();

Como vemos llamamos al método nextLine() dos veces, la primera retorna la tecla "Enter"
y la segunda se queda esperando que ingresemos el apellido y nombre (tener en cuenta
que esto es necesario solo si previamente se llamó al método nextInt() o nextFloat().
EL USO DEL THIS

this. Es una referencia al objeto que envia un mensaje, o simplemente una referencia al
objeto que llama un método (éste no debe ser static)

El this tiene dos usos:

1- Seleccionar explícitamente un miembro de una clase con el fin de dar más claridad o de
evitar colisión de identificadores:

Ejemplo:

class Triangulo
{
private double base;
private double altura;

public void datosTriangulo(double base, double altura)


{
this.base= base;
this.altura= altura;
}
}

Se evita con this la colisión etre argumentos y variables instancia.

2- Que un método devuelva el mismo objeto que le llamó. De esa manera se pueden hacer
llamadas en cascada a métodos de la misma clase.

Ejemplo:

class Triangulo
{
private double base;
private double altura;
public Triangulo datos(double base, double altura)
{
this.base= base;
this.altura= altura;
return this;
}

public Triangulo visualizar( )


{
System.out.println( “Base=” + base);
System.out.println (“Altura=” + altura);
return this;
}

public double area( )


{
return base * altura / 2.0;
}
}

Se puede concatenar llamadas a métodos:

Triangulo t= new Triangulo( );


t.datos(15.0 , 12.0) . visualizar( );

Você também pode gostar