paolo1960cla ha scritto:
• La classe dovrà essere definita ABSTRACT CLASS qualora sia mia intenzione definire i metodi in @override o ereditare i metodi in .super
NO. Ridefinire un metodo lo puoi fare indipendentemente dal fatto che la classe corrente o la super-classe siano astratte oppure no. È ovvio che se la super-classe è astratta e la sotto-classe è "concreta" (non astratta), allora la sotto-classe per forza di cose dovrà fornire una implementazione per tutti i metodi che sono ancora astratti nella super-classe.
Riguardo l'uso della annotazione @Override è semplicemente un aiuto a livello di compilazione (non è obbligatorio usarla). Se un metodo è marcato @Override, il compilatore si assicurerà che il metodo faccia davvero un override, altrimenti lo segnala come errore.
La invocazione di una versione "super" di un metodo la puoi sempre fare ... a patto che la versione del metodo nel super tipo sia accessibile e "concreta".
paolo1960cla ha scritto:
• Una ABSTRACT CLASS non si implementa (implements) ma si estende (exstends).
Ok
paolo1960cla ha scritto:
• ABSTRACT CLASS NON deve essere Istanzata
Sì, vero, "non può" essere istanziata.
paolo1960cla ha scritto:
• La ABSTRACT CLASS è riconoscibile dalla keyword “abstract”
Sì
paolo1960cla ha scritto:
• Una ANONYMOUS INNER CLASS è solo implementazione (implements) di qualcos’altro infatti non avendo un nome, non può definire nuovi metodi;
NO.
Una anonymous inner class può solo fare UNA di queste due cose:
a) estendere 1 classe
oppure
b) implementare 1 interfaccia (estendendo
implicitamente Object)
Una anonymous inner class PUO' definire metodi "nuovi", ad esempio metodi privati ad uso interno dei metodi in override. Può anche definirli public ... ma tanto non saranno usabili, il nome della classe non lo sai e quindi NON avrai variabili del tipo della anonymous inner class e quindi i metodi nuovi, anche se pubblici, non li potresti invocare.
paolo1960cla ha scritto:
• La classe che vuole EREDITARE le proprietà ed i metodi definiti in un’altra classe, dovrà estendere (extends) la stessa classe. Con extends è possibile sia ridefinire i metodi (@override) oppure ereditare i metodi (super);
Un po' impreciso. "extends" mette in atto la "ereditarietà", quindi una classe B che estende A, eredita i membri (quelli accessibili!) di A ed ha facoltà (o obbligo se sono abstract e la sotto classe è concreta) di ridefinire quei metodi accessibili che non sono final.
paolo1960cla ha scritto:
• La classe “Regular” può essere estesa (extends)
Non è chiaro cosa intendi per "regular". Comunque una classe in generale si può estendere se tutte le seguenti condizioni esistono:
- è accessibile (dalla classe che vuole estenderla)
- non è final
- ha un costruttore accessibile.
Una classe "final" NON è estendibile.
paolo1960cla ha scritto:
• Una ANONYMOUS CLASS, non avendo un proprio nome, NON può essere estesa.
Vero. E dirò di più: una anonymous inner class è IMPLICITAMENTE final !
paolo1960cla ha scritto:
• Una ABSTRACT CLASS NON deve obbligatoriamente estendere (extends) una Interfaccia e NON deve obbligatoriamente implementare (implements) una Interfaccia , NON deve obbligatoriamente eseguire override (@override) ne eseguire ereditare (super)
Ok, vero. Se una classe è astratta NON ha alcun obbligo di rendere "concreti" tutti (o certi) i metodi.
paolo1960cla ha scritto:
• La ABSTRACT CLASS, che non è completa, ha SEMPRE un nome contrariamente alla Anonymous Class o ad una Anonymous Inner Class
Qui è vago. Tutte le classi hanno SEMPRE un nome, ANCHE le anonymous inner class. Solo che per le anonymous inner class il nome è generato dal compilatore e quindi non è direttamente noto/deducibile nel sorgente e dal programmatore.
paolo1960cla ha scritto:
• Una ABSTRACT CLASS può, ma non necessariamente, avere METODI ASTRATTI
Vero. Una classe può essere abstract e avere solo metodi concreti. Ovviamente ci dovrà essere un motivo per questo ....
paolo1960cla ha scritto:
• Solo le Proprietà ed i Metodi Statici di una qualunque Classe o Interfaccia sono visibili SENZA implementare la Classe o Interfaccia che li contiene
Detto un po' male ma in sostanza i membri statici esistono (e sono usabili) indipendentemente dalle istanze del tipo che li contiene. Tieni presente che le interfacce NON possono avere metodi statici, questo fino a Java 7. Da Java 8 le interfacce possono avere metodi di "default" e metodi "statici".
paolo1960cla ha scritto:
• Le Classi definite STATIC presentano Proprietà e Metodi che sono visibili dalla altre Classi del Progetto anche se la Classe NON viene Istanzata
Una classe NON è "Static" perché ha solo metodi/campi static. In Java il termine "static class" NON ha senso a meno che ti riferisci alle nested (static) class.