JavaRush /Java Blog /Random-IT /Domanda e risposta: è possibile definire metodi astratti ...

Domanda e risposta: è possibile definire metodi astratti in una classe finale?

Pubblicato nel gruppo Random-IT
Questa domanda interessante e importante è stata posta a uno dei miei lettori durante un'intervista telefonica per una posizione di sviluppatore Java. Sebbene sapesse che era impossibile creare una classe astratta finalin linguaggio Java , era confuso dalla formulazione della domanda. La risposta è semplice: no, finalnon possono esserci metodi astratti in una classe. Perché? Perché non appena dichiari un metodo astratto in una classe del linguaggio Java, questa classe diventa automaticamente astratta e finalnon puoi creare una classe astratta nel linguaggio Java. finalCiò significa che non possono esserci metodi astratti in una classe Java.
Domanda e risposta: è possibile definire metodi astratti in una classe finale?  -1
Molti sviluppatori Java si confondono quando rispondono a questa domanda a causa del testo. Anche se la persona a cui è stata posta la domanda ha familiarità con il concetto generale, potrebbe non rendersi conto che una classe, dopo aver dichiarato al suo interno un metodo astratto, diventa astratta e non è possibile creare una classe astratta finalin Java. Questo punto separa questa domanda dalla domanda più comune e frequente: è possibile in Java dichiarare una classe astratta e finale allo stesso tempo? Diamo un'occhiata ad un codice di esempio per dimostrare che finalnon è possibile dichiarare un metodo astratto in una classe. Prendiamo Hello.javauna public finalclasse chiamata Hello, che ha un metodo astratto print().
public final class Hello {
  public abstract void print();
}
Digita questo codice nell'IDE, riceverai il seguente messaggio di errore, dicono Helloche deve essere una classe astratta in modo che i metodi astratti possano essere dichiarati al suo interno.
Domanda e risposta: è possibile definire metodi astratti in una classe finale?  - 2
Domanda e risposta: è possibile definire metodi astratti in una classe finale?  - 3
La stessa cosa accadrà se digiti questo codice nel Blocco note e lo compili utilizzando l'utilità javac dalla riga di comando. Secondo le specifiche Java, non appena si dichiara un metodo astratto all'interno di una classe, quella classe diventa una classe astratta e poiché non è possibile creare una classe astratta finalin Java, il compilatore genererà un errore. Questo vale sia per le classi di primo livello che per le classi nidificate nel linguaggio Java. Anche se dichiari un metodo astratto in una finalclasse annidata, l'errore sarà lo stesso. Un'altra domanda correlata è: una classe astratta in Java può avere metodi statici? Risposta: sì, possono, non c'è problema nel dichiarare un metodo statico in una classe astratta, poiché per utilizzare un metodo statico non è necessario creare un'istanza della classe, si possono richiamare semplicemente utilizzando il nome della classe. Possiamo modificare il nostro esempio per includere Helloun metodo nella classe main(), che è statica in Java, come mostrato di seguito:
public abstract class Hello {
  public abstract void print();
  public static void main(String args[]) {
     // Howой-то code
  }
}
Come puoi vedere, non viene generato alcun errore di compilazione. Questo codice viene compilato senza problemi, poiché in Java puoi dichiarare in modo completamente sicuro un metodo statico in una classe astratta. Brevi conclusioni È impossibile dichiarare un metodo astratto in una finalclasse. Perché una volta fatto questo, la classe diventa automaticamente astratta, secondo le specifiche Java. E poiché finaluna classe in Java non può essere astratta, questo è inaccettabile e il compilatore ti proibirà di farlo generando un errore. Ma puoi dichiarare metodi statici sia nelle classi finali che in quelle astratte, non ci sono problemi con questo.
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION