Documente Academic
Documente Profesional
Documente Cultură
2 0 2 0
R: Clasa interna (non-statica) poate instantia obiecte doar prin intermediul unei instante
a clasei exterioare si are access la toate variabilele si metodele acesteia, indiferent daca
sunt statice sau nu.
Clasa interna statica poate instantia obiecte fara a fi nevoie de o instanta a clasei
exterioare, folosindu-se de clasa in sine ( OuterClass.InnerClass inner = new
InnerClass(); ). De asemenea, neavand o instanta a clasei externe, clasa interna statica
are access IN MOD DIRECT doar la variabilele si metodele care tin de clasa, in speta
clasa exterioara, mai precis variabilele si metodele statice.
2) De cate tipuri sunt clasele interne? Precizati cate un avantaj al uzitarii fiecarui tip
in parte.
R: Clasele interne sunt de 4 tipuri: ,normale’ (regular inner classes), statice, anonime si
interne metodelor.
Clasele interne metodelor sunt folosite in momentul in care utilitatea acestora este
locala si nu avem nevoie de ele in alta parte a programului, ascunzand in acelasi timp
implementarea de zona exterioara metodelor ce le contin.
Referitor la mecanismul de mostenire in cazul claselor interne vom analiza mai multe
situatii. In cazul in care clasa fiu ce mosteneste clasa interna este in afara clasei externe
( declarata total separate ), analizam urmatoarele situatii
-> in cazul in care clasa interna este una non-statica, atunci trebuie sa ,,legam” in
constructorul clasei fiu o referinta la un obiect de tipul clasei interne ( eventual dat ca
parametru constructorului ). In cazul in care clasa interna este una statica atunci
implementarea este una mult mai usoara, in momentul in care o extindem avem o
referinta directa la aceasta, neavand nevoie sa facem legaturile sus mentionate in
constructor. ( InheritingClass extends OuterClass.InnerClass va fi suficient pentru a
realiza mostenirea ).
-> In cazul in care clasa care mosteneste clasa interna ( fie ea statica sau non-statica)
se afla si ea la randul ei in aceeasi clasa externa, nu este nevoie de implementari
aditionale
-> Clasa interna poate mosteni clasa externa, insa acest lucru este de multe ori
redundant, mai ales daca clasa interna este una non-statica, in cazul acesta avand
acces oricum la variabilele si metodele clasei externe
-> Daca o clasa (A) mosteneste clasa externa, aceasta va mosteni doar metodele si
variabilele acesteia, nu si clasele. Pentru a mosteni si clasa interna este nevoie de o
noua clasa (B) in interiorul clasei A care sa mosteneasca clasa interna aferenta.
5) Limbajul Java permite definirea interfetelor in interiorul unei clase? DA daca interfata
e statica). Dar in interiorul unei metode? NU (metodele nu pot contine membri static)
6) O metoda poate avea ca rezultat un obiect al carui tip este reprezentat de o clasa
definita local in metoda? NU
Următoarele reguli sunt obligatorii pentru metodele moştenite pe care dorim să le
supradefinim:
Metodele declarate public în superclasă trebuie să fie obligatoriu publice în toate
subclasele.
Metodele declarate protected în superclasă trebuie să fie publice fie protected în
subclase. Ele nu pot fi declarate private sau implicit
Metodele declarate private în superclasă nu se moştenesc, aşa că pentru ele nu există
reguli de supradefinire!
Metodele declarate fara modificator de acces (implicit) în superclasă trebuie să fie
declarate public, protected sau implicit în subclase. Ele nu pot fi declarate private!
Type of methods: Interface can have only abstract methods. An abstract class can have
abstract and non-abstract methods. From Java 8, it can have default and static methods
also.
Final Variables: Variables declared in a Java interface are by default final. An abstract
class may contain non-final variables.
Type of variables: Abstract class can have final, non-final, static and non-static variables.
The interface has only static and final variables.