Ejemplo: Las clases del paquete MiPaquete (ficheros.class
y.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/PaquetePruebao 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(); } }