Metodi statici in classi astratte Java8

di il
1 risposte

Metodi statici in classi astratte Java8

Ciao a tutti.
La mia domanda è: perché con la configurazione in calce posso accedere al metodo statico della classe astratta attraverso
un oggetto ( w.write(); nella classe Programmer )?

Grazie mille per la disponibilità

abstract class Writer {
public static void write() {
System.out.println("Writing...");
}
}


class Author extends Writer {
public static void write() {
System.out.println("Writing book");
}
}


public class Programmer extends Writer {
public static void write() {
System.out.println("Writing code");
}

public static void main(String[] args) {
Writer w = new Programmer();
w.write();
}
}

1 Risposte

  • Re: Metodi statici in classi astratte Java8

    Andrea78 ha scritto:


    La mia domanda è: perché con la configurazione in calce posso accedere al metodo statico della classe astratta attraverso
    un oggetto ( w.write(); nella classe Programmer )?
    Il fatto che la classe sia astratta, NON impedisce di invocare il metodo static. Un membro static è associato alla classe ... non ad una istanza (insomma, NON importa se Writer è istanziabile o no).

    Inoltre per i metodi static non esiste il concetto di "override" (al massimo si parla di nascondere, "hiding"), quindi la versione davvero eseguita NON è quella dell'oggetto realmente istanziato ma quella scelta solo sulla base del tipo "statico" del reference. La variabile w è di tipo Writer, quindi il metodo eseguito E' quello di questo tipo. Non conta che Writer ha sotto-classi in cui c'è un altro write.

    Tra l'altro la invocazione funzionerebbe anche se facessi es.:

    Writer w = null;
    w.write();

    Per poter invocare un metodo "statico", al compilatore NON importa il valore del reference (che sia null o non null) ma, ripeto, solo il tipo "statico" del reference che è dedotto Writer. Quindi: w.write() è uguale a fare Writer.write() anche se w fosse null.

    P.S. tutto questo non c'entra direttamente con Java 8, vale per qualunque versione di Java.
Devi accedere o registrarti per scrivere nel forum
1 risposte