Clasa interioară
În programarea orientată pe obiecte (OOP, O bject O riented P rogramming) o clasă interioară (din „limba engleză de clasă imbricată sau o clasă interioară) este o clasă declarată într -o altă clasă de clasă sau de interfață. Acestea se găsesc în limbi precum Java , începând cu versiunea 1.1 sau D. În Python , este posibil să creați o clasă internă în cadrul unei clase, metode sau funcții.
Generalitate
O instanță a unei clase normale sau principale poate exista singură. Pe de altă parte, o instanță a unei clase interioare nu poate fi instanțiată fără a fi legată de o clasă principală.
Să luăm o Macchina
cu patru Ruote
ca o noțiune abstractă. Ruote
noastre au caracteristici specifice care depind de a face parte din Macchina
noastră. Acest concept nu reprezintă Ruote
ca Ruote
în general, care pot face parte dintr-un vehicul, ci le reprezintă în mod specific. Putem modela acest concept folosind clasele interioare după cum urmează:
Avem Macchina
clasă principală. Instanțele din clasa Macchina
sunt alcătuite din patru instanțe din clasa Ruote
. Această implementare specială a Ruote
este specifică mașinii, astfel încât codul nu modelează conceptul general al unei roți care poate fi cel mai bine reprezentat ca o clasă principală. Deci, este conectat semantic la clasa Macchina
și codul Ruote
este cumva cuplat la clasa externă. Roata este mai unită cu mașina. Roata pentru o anumită mașină este unică, în timp ce pentru roata, în general, este unită în ansamblu la mașină. Spunem că Ruote
noastre fac parte din clasa Macchina
.
Clasele interioare ne oferă un mecanism pentru a modela cu exactitate această conexiune. Ruote
, Macchina
fiind clasa principală și Ruote
fiind clasa interioară.
Prin urmare, clasele interioare privesc orientarea obiectului anumitor părți ale programului care altfel nu ar fi încapsulate într-o clasă.
Bucăți mari de cod dintr-o clasă ar putea fi modelate sau rescrise ca o clasă principală separată, mai degrabă decât ca o clasă interioară. Acest lucru face codul mai general în aplicația sa și, prin urmare, reutilizabil, dar ar putea fi o generalizare prematură. Poate fi mai eficient dacă codul dvs. are multe clase interne cu funcționalitate partajată.
Tipurile claselor interioare
În Java există multe tipuri de clase interne care sunt împărțite în patru grupuri diferite:
- Clase statice imbricate (și interfețe).
- Clase de membri.
- Cursuri locale.
- Cursuri anonime .
Cursuri statice în Java
Clase interioare declarate cu funcția de cuvânt cheie static ca clase statice comune; acestea nu sunt conectate la o instanță, dar pot accesa doar variabilele și metodele statice ale clasei care conține. Tipurile externe trebuiau să preceadă numele clasei interne cu cel al clasei care conține. Clasele interioare sunt implicit statice.
/ * Clasa care conține * /
clasa publică ContainerClass
{
private static String variableStatica = "variabilă statică" ;
// Constructorul clasei care conține
public ContainerClass ()
{
}
// Metoda statică care poate numi clasa interioară statică
public static void static Method () {
InterfacciaInterna ClasseInterna ic = new ();
ic . print ();
}
// Clasa interioară statică
Clasa statică privată implementează ClasseInterna InterfacciaInterna
{
// Constructorul clasei interioare statice
public InnerClass ()
{
}
/ * Implementarea clasei interioare
* Obțineți variabila statică din clasa care conține * /
public nul print () {
Sistem . afară . println ( variableStatic );
}
}
// Interfață internă (implicit statică)
interfață privată InterfacciaInterna {
public nul print ();
}
}
Fiecare instanță a unei clase interioare se referă la o instanță a clasei care conține, cu excepția claselor interioare locale și a claselor anonime declarate într-un context static. Prin urmare, se pot referi implicit la variabile și metode ale clasei care conține instanța. Referința clasei interne la instanță poate fi obținută prin NomeDellaClasseContenitrice.this.
Cu toate acestea, o clasă interioară nu poate conține variabile statice sau metode. La început, trebuie trimisă o referință la clasa conținută, ceea ce înseamnă că nu poate exista o instanță într-o metodă de instanță sau într-un constructor al clasei care conține sau (pentru membrii claselor și claselor anonime) utilizând sintaxa instanceContenitrice.new ClasseInterna
().