Perché ci è permesso avere un metodo principale finale in java?


Qualcuno può dirmi l'uso di rendere il metodo main come final in java.

Mentre questo è consentito in java

public static final void main(String[] args) {  



}

Non vedo alcun uso di renderlo definitivo. ad ogni modo è statico, quindi non possiamo ignorarlo.

Author: aioobe, 2014-09-25

1 answers

L'aggiunta di final a un metodo statico può effettivamente fare la differenza. Si consideri il seguente codice:

class A {
    public static void main(String[] args) {
        System.out.println("A");
    }
}

class B extends A {
    public static void main(String[] args) {
        System.out.println("B");
    }
}

class C extends B {
}

public class Test {
    public static void main(String[] args) {
        C.main(args);  // Will invoke B.main
    }
}

L'aggiunta di final a A.main impedirebbe il nascondimento accidentale di A.main. In altre parole, l'aggiunta di final a A.main garantisce che B.main non è consentito e che C.main stampa quindi "A" al contrario di "B".

Perché ci è permesso avere un metodo principale finale in java?

Accanto al caso d'angolo sopra, aggiungendo final a una statica il metodo non fa molta differenza, quindi non vedo un grande punto nell'aggiungere una regola per non consentirla.

Maggiori informazioni disponibili qui: Comportamento del metodo statico finale

 10
Author: aioobe, 2017-05-23 11:53:47