Ejemplo: Las clases del paquete MiPaquete (ficheros.classy.java) se almacenarán en directorio MiPaquete
import nombre-paquete;
Se pueden definir clases en un paquete sin que el mundo exterior sepa que están allí.
.java
package nombre-paquete
package puede incluirse en varios archivos fuente
package paq1[.paq2[.paq3]];
java.awt.image
PaquetePrueba.java (directorio prueba)
prueba y ejecutar
javac -bootclasspath $CLDC_PATH/common/api/classes
-d tmpclasses prueba/PaquetePrueba.java
preverify -classpath $CLDC_PATH/common/api/classes:tmpclasses
-d . prueba/PaquetePrueba
o bien
preverify -classpath $CLDC_PATH/common/api/classes:tmpclasses
-d . tmpclasses
kvm -classpath . prueba.PaquetePruebao bien añadir directorio padre de prueba a CLASSPATH y ejecutar
kvm prueba.PaquetePrueba
package MyPack;
class Balance {
String name;
double bal;
Balance(String n, double b) {
name = n;
bal = b;
}
void show() {
if(bal<0)
System.out.print("-->> ");
System.out.println(name + ": $" + bal);
}
}
class AccountBalance {
public static void main(String args[]) {
Balance current[] = new Balance[3];
current[0] = new Balance("K. J. Fielding", 123.23);
current[1] = new Balance("Will Tell", 157.02);
current[2] = new Balance("Tom Jackson", -12.33);
for(int i=0; i<3; i++) current[i].show();
}
}
| Desde método en ... | private | sin modif. | protected | public |
|---|---|---|---|---|
| misma clase | sí | sí | sí | sí |
| subclase del mismo paquete | no | sí | sí | sí |
| no subclase del mismo paquete | no | sí | sí | sí |
| subclase de diferente paquete | no | no | sí | sí |
| no subclase de diferente paquete | no | no | no | sí |
Ejemplo: P26 Ejemplo: P26
package p1;
public class Protection {
int n = 1;
private int n_pri = 2;
protected int n_pro = 3;
public int n_pub = 4;
public Protection() {
System.out.println("constructor base ");
System.out.println("n = " + n);
System.out.println("n_pri = " + n_pri);
System.out.println("n_pro = " + n_pro);
System.out.println("n_pub = " + n_pub);
}
}
class Derived extends Protection {
Derived() {
System.out.println("constructor de Derived");
System.out.println("n = " + n);
// System.out.println("n_pri = " + n_pri);
System.out.println("n_pro = " + n_pro);
System.out.println("n_pub = " + n_pub);
}
}
class SamePackage {
SamePackage() {
Protection p = new Protection();
System.out.println("constructor de SamePackage");
System.out.println("n = " + p.n);
// System.out.println("n_pri = " + p.n_pri);
System.out.println("n_pro = " + p.n_pro);
System.out.println("n_pub = " + p.n_pub);
}
}
package p2;
class Protection2 extends p1.Protection {
Protection2() {
System.out.println("constructor de Protection2");
// System.out.println("n = " + n);
// System.out.println("n_pri = " + n_pri);
System.out.println("n_pro = " + n_pro);
System.out.println("n_pub = " + n_pub);
}
}
class OtherPackage {
OtherPackage() {
p1.Protection p = new p1.Protection();
System.out.println("other package constructor");
// System.out.println("n = " + p.n);
// System.out.println("n_pri = " + p.n_pri);
// System.out.println("n_pro = " + p.n_pro);
System.out.println("n_pub = " + p.n_pub);
}
}
import paquete[.paquete2].(nombre_clase|*);
* especificamos que se importa el paquete completo. Esto incrementa el tiempo de compilación, pero no el de ejecución.
Ejemplo: P27
MyPack/Balance.java
package MyPack;
/* La clase Balance, su constructor, y su metodo show()
deben ser públicos. Esto significa que pueden ser utilizados por
código que no sea una subclase y esté fuera de su paquete.
*/
public class Balance {
String name;
double bal;
public Balance(String n, double b) {
name = n;
bal = b;
}
public void show() {
if(bal<0)
System.out.print("-->> ");
System.out.println(name + ": $" + bal);
}
}
TestBalance.java
import MyPack.*;
class TestBalance {
public static void main(String args[]) {
/* Como Balance es pública, se puede utilizar la
clase Balance y llamar a su constructor. */
Balance test = new Balance("J. J. Jaspers", 99.88);
test.show(); // también se puede llamar al metodo show()
}
}
acceso interface nombre {
tipo_devuelto método1(lista_de_parámetros);
tipo_devuelto método2(lista_de_parámetros);
tipo var_final1=valor;
tipo var_final2=valor;
// ...
tipo_devuelto métodoN(lista_de_parámetros);
tipo var_finalN=valor;
}
Ejemplo definición de interfaz
interface Callback {
void callback(int param);
}
Ejemplo de uso de interfaces: P28
class Client implements Callback {
public void callback(int p) {
System.out.println("callback llamado con " + p);
}
void nonIfaceMeth() {
System.out.println("Las clases que implementan interfaces " +
"además pueden definir otros miembros.");
}
}
class TestIface {
public static void main(String args[]) {
Callback c = new Client();
c.callback(42);
}
}
Ejemplo
class TestIface {
public static void main(String args[]) {
Callback c = new Client();
c.callback(42);
}
}
// Otra implementación de Callback.
class AnotherClient implements Callback {
public void callback(int p) {
System.out.println("Otra versión de callback");
System.out.println("El cuadrado de p es " + (p*p));
}
}
class TestIface2 {
public static void main(String args[]) {
Callback c = new Client();
AnotherClient ob = new AnotherClient();
c.callback(42);
c = ob; // c hace referencia a un objeto AnotherClient
c.callback(42);
}
}
import java.util.Random;
interface SharedConstants {
int NO = 0;
int YES = 1;
int MAYBE = 2;
int LATER = 3;
int SOON = 4;
int NEVER = 5;
}
class Question implements SharedConstants {
Random rand = new Random();
int ask() {
int prob = (int) (100 * rand.nextDouble());
if (prob < 30) return NO; // 30%
else if (prob < 60) return YES; // 30%
else if (prob < 75) return LATER; // 15%
else if (prob < 98) return SOON; // 13%
else return NEVER; // 2%
}
}
class AskMe implements SharedConstants {
static void answer(int result) {
switch(result) {
case NO:
System.out.println("No"); break;
case YES:
System.out.println("Si"); break;
case MAYBE:
System.out.println("Puede ser"); break;
case LATER:
System.out.println("Mas tarde"); break;
case SOON:
System.out.println("Pronto"); break;
case NEVER:
System.out.println("Nunca"); break;
}
}
public static void main(String args[]) {
Question q = new Question();
answer(q.ask());
answer(q.ask());
answer(q.ask());
answer(q.ask());
}
}
interface A {
void meth1();
void meth2();
}
interface B extends A {
void meth3();
}
class MyClass implements B {
public void meth1() {
System.out.println("Implemento meth1().");
}
public void meth2() {
System.out.println("Implemento meth2().");
}
public void meth3() {
System.out.println("Implemento meth3().");
}
}
class IFExtend {
public static void main(String arg[]) {
MyClass ob = new MyClass();
ob.meth1();
ob.meth2();
ob.meth3();
}
}