Preparare la certificazione Java Programmer OCPJP7: enums e nested classes

ENUMERATORI

  • I tipi ENUM possono avere costruttori e variabili
  • I costruttori di un ENUM devono essere o private oppure con la visibilità di default (senza modificatore esplicito)
  • Un enumeratore può implementare un’interfaccia ma NON può estendere una classe.
  • Ogni costante di un enumeratore è un oggetto di quel tipo enumeratore.
  • Un enumeratore estende automaticamente Enum.
  • Un Enum può avere solo costruttiori private
  • Un Enum NON può avere costruttori public
  • Un Enum può avere campi e metodi public
  • Il confronto con equals() tra I valori di 2 enumeratori diversi restituisce false
  • Per confrontare i valori numerici di 2 enumeratori diversi si deve utilizzare l’operatore == dopo aver invocato su di esssi il metodo ordinal().
  • In questo caso, se i valori degli enumeratori occupano la stesso posizione viene restituito true
  • I valori di un enumerator si possono stampare in 2 modi:
    • System.out.println(Seeds.Hearts.ordinal()) -> stampa il valore numerico
    • System.out.println(Seeds.Hearts) -> stampa la stringa “Hearts”
  • Se un enum è dichiarato all’interno di una classe, per indicare un’istanza dell’enum devo utilizzare il nome della classe.
  • Esempio:
  • class Phone {
       public static void main(String[] args) { 
          Phone.State = Phone.State.ONCALL
    }
    
       public enum State { ONCALL, IDLE, WAITING }
    }
    
  • Per iterare sui valori di un enum si deve utilizzare il metodo values() nel enhanced loop.
  • NESTED CLASS

  • Una nested class statica NON può vedere le variabili di istanza della sua classe contenitore in modo diretto.
  • I metodi definiti nelle inner class fanno lo shadowing dei metodi a parità di nome con quelli della classe contenitore. Lo shadowing viene fatto sul nome e non sulla sua intere signature.
  • Una inner class può accedere ai membri privati della classe outer. Allo stesso modo, anche la classe outer può accedere ai membri privati della inner class.
    • Una classe esterna può accedere ai membri private di una nested class solo dichiarando un oggetto della nested class stessa.
    This entry was posted in $1$s. Bookmark the permalink.

    Leave a Reply

    Your email address will not be published. Required fields are marked *