1-
package mycompany.tutorial;
abstract class TestSpecif{
public int i1=10;
private int i2=20;
protected int i3=30;
public static final void m1(){
System.out.println("i1="+i1);
}
private void m2(){
i2+=10;
}
abstract void m3();
}
A la compilation, un message informe que la méthode m1() est statique et ne peut donc pas utiliser de variable d'instance telles i1, il faut que i1 soit statique. Dans ce cas, i1 sera défini de cette façon:
public static int i1=10;
2-
int getI2(){
return this.i2;
}
Cette méthode est un accesseur, elle permet de donner des valeurs de variables privée de l'extérieur de la classe.
3-
void setI2(int i2){
this.i2=i2;
}
Cette méthode est un modificateur, elle permet de modifier la valeur d'une variable privée de l'extérieur de la classe.
1-
Pour bloquer l'héritage, il faut définir la
classe TestSpecifFille en final :
final class TestSpecifFille extends
TestSpecif{
}
2-
Il y a erreur de compilation si l'on tente de surcharger
m1(): cette méthode était définie
final
3-
final class TestSpecifFille extends TestSpecif{
void m4(){
i3+=10;
//l'opération
i2+=10; est interdite car i2 est déclaré 'private' dans
la classe TestSpecif .
}
void m3(){
System.out.println(i3);
}
}
1-
public
static void main(String[] sArgs){
System.out.println("i1="+i1);
System.out.println("i2="+getI2());
System.out.println("i3="+i3);
}
ne fonctionne
pas car:
- La méthode
main() qui est dans un contexte statique ne peut appeler
getI2() qui n'est pas statique.
-
La variable i3 n'est pas statique.
Il suffit alors d'instancier un TestSpecifFille pour se trouver dans un contexte d'instance et plus de classe.
public static void main(String[]
sArgs){
TestSpecifFille
tsf=new TestSpecifFille();
System.out.println("i1="+tsf.i1);
System.out.println("i2="+tsf.getI2());
System.out.println("i3="+tsf.i3);
}
1-
Il
suffit de créer par les commandes de votre système
d'exploitation les répertoires mycompany/tutorial/exemples1:
mkdir -p mycompany/tutorial/exemples1
Dans les sources Java, il faudra préciser:
package mycompany.tutorial.exemples1; en début de source.
2-
Idem
3-
Dans
le répertoire courant.
Lancer
l'une de ces classes. Que ce passe-t-il et pourquoi?
La
JVM léve une NoClassFoundException car elle ne trouve
pas les classes.
Comment
faut-il organiser les sources et les classes pour faciliter le
développement puis permettre à l'application de
fonctionner?
Il faut créer l'arborescence
./mycompany/tutorial/exemples1 et les classes doivent se
trouver dans ce répertoire.
4-
Il
faut se placer dans le répertoire père du
répertoire mycompany puis on lance:
java mycompany.tutorial.exemples1.Class1
5-
Se
positionner dans le répertoire père du
répertoire mycompany et lancer:
jar cvf tutorial.jar mycompany