1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
| public class DemoFinalPrivate {
public DemoFinalPrivate() {
method(); // peut être appelée ici
}
public void test() {
method(); // peut être appelée ici
// classe local
class Toto {
public void truc() {
method(); // peut être appelée ici
}
}
Toto toto = new Toto();
toto.truc();
// classe anonyme local
new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
method(); // peut être appelée ici
}
};
}
private final void method() {
System.out.println("Execute method()");
}
private final void method2() {
System.out.println("Execute method2()");
}
public class ExempleInnerClass {
ExempleInnerClass() {
method(); // peut être appelée ici
}
}
public static class Test1 extends DemoFinalPrivate {
public Test1() {
//method(); // ne peut être appelée ici (erreur de compile)
}
}
public static class Test2 extends DemoFinalPrivate {
/**
* Peut être implémentée ici mais ne constitue pas une surcharge de celle de DemoPrivateFinal : il s'agit d'une méthode de Test2 qui n'a à voir avec celle de DemoPrivateFinal qu'elle a juste le même nom et la même signature
*/
private final void method() {
// super(); Comme ce ne peut être une surcharge, on ne peut pas appeler super() ici
System.out.println("Methode de Test2");
}
public Test2() {
method(); // appelle method() définie dans Test2, pas celle de TestFinalPrivate
}
public void machin() {
DemoFinalPrivate demoFinalPrivate = new DemoFinalPrivate();
demoFinalPrivate.method2();
Test2 test2 = new Test2();
//test2.method2(); // ne peut être vue ici : provoque erreur de compile parce que privée dans DemoFinalPrivate
}
}
public static void main(String[] args) {
System.out.println("Créé instance de DemoFinalPrivate");
new DemoFinalPrivate();
System.out.println("Créé instance de Test2");
new Test2();
}
} |