Differences

This shows you the differences between two versions of the page.

Link to this comparison view

poo-ca-cd:laboratoare:clase-interne-si-strings [2025/11/06 12:42]
florian_luis.micu [Clase anonime]
poo-ca-cd:laboratoare:clase-interne-si-strings [2025/11/06 14:02] (current)
florian_luis.micu [Laboratorul 5: Clase Interne și Strings]
Line 3: Line 3:
   * Autori: [[stefancocioran@gmail.com | Ștefan Cocioran ]], [[miculuis1@gmail.com | Florian-Luis Micu ]], [[sorinabuf@gmail.com | Sorina-Anamaria Buf ]]   * Autori: [[stefancocioran@gmail.com | Ștefan Cocioran ]], [[miculuis1@gmail.com | Florian-Luis Micu ]], [[sorinabuf@gmail.com | Sorina-Anamaria Buf ]]
   * Data publicării:​ 03.11.2025   * Data publicării:​ 03.11.2025
-  * Data ultimei modificări: ​05.11.2025+  * Data ultimei modificări: ​06.11.2025
     * ștergerea notiței legată de contest (ambele observații au fost rezolvate).     * ștergerea notiței legată de contest (ambele observații au fost rezolvate).
     * refrazări pentru favorizarea unei lecturi clare și rapide.     * refrazări pentru favorizarea unei lecturi clare și rapide.
 +    * indicarea că o clasă internă poate fi record, enum, interfață sau clasă abstractă.
 +    * modificări pentru secțiunea clase anonime
 +      * adăugarea unui exemplu mai detaliat pentru clase anonime în GUI.
 +      * precizarea că o clasă internă are acces la membrii privați ai clasei externe.
 +      * adăugarea unor secțiuni legate de accesul la metode și variabile în mai multe contexte.
  
 ===== Obiective ===== ===== Obiective =====
Line 94: Line 99:
 Car.class Car$OttoEngine.class Engine.class Test.class Test.java Car.class Car$OttoEngine.class Engine.class Test.class Test.java
 </​code>​ </​code>​
- 
-Urmăriți exemplul de folosire a claselor interne de mai sus. Adresați-vă asistentului pentru eventuale neclarități. 
  
 Din interiorul unei clase interne, putem accesa **referința la instanța clasei externe** folosind numele acesteia urmat de keyword-ul ''​this'':​ Din interiorul unei clase interne, putem accesa **referința la instanța clasei externe** folosind numele acesteia urmat de keyword-ul ''​this'':​
Line 133: Line 136:
   * Țineți cont de faptul că o **clasă internă** se comportă ca un **membru al clasei**, concret **nu** puteți folosi un membru al clasei dacă nu inițializați mai întâi clasa.   * Țineți cont de faptul că o **clasă internă** se comportă ca un **membru al clasei**, concret **nu** puteți folosi un membru al clasei dacă nu inițializați mai întâi clasa.
   * Chiar dacă ''​model''​ este un **câmp privat**, clasa internă **îl poate accesa**, deoarece și clasa internă este un membru al clasei.   * Chiar dacă ''​model''​ este un **câmp privat**, clasa internă **îl poate accesa**, deoarece și clasa internă este un membru al clasei.
 +  * O clasă internă nu trebuie neapărat să fie o clasă obișnuită;​ puteți declara ca membri interni și **records**,​ **enums**, **interfețe sau clase abstracte**.
 </​note>​ </​note>​
  
Line 355: Line 359:
 } }
 </​code>​ </​code>​
-  - Metode noi definite în clasa anonimă+  - **Metode noi definite în clasa anonimă**
     * Se pot adăuga metode proprii, dar **nu se pot accesa prin referința superclasei/​interfeței**.     * Se pot adăuga metode proprii, dar **nu se pot accesa prin referința superclasei/​interfeței**.
     * Sunt vizibile **doar** în interiorul clasei anonime, deci pot fi considerate metode private sau helper. <code java>     * Sunt vizibile **doar** în interiorul clasei anonime, deci pot fi considerate metode private sau helper. <code java>
Line 673: Line 677:
  
 <code java> <code java>
-button.addActionListener(new ActionListener() { // clasa anonimă implementează ActionListener +// Codul tău cu clasa anonimă 
-    public void actionPerformed(ActionEvent e) {             +public class MyGUI { 
-        numClicks++;​+ 
 +    public void closeWindow() { 
 +        ​// Clasa anonimă implementează ActionListener 
 +        ​button.addActionListener(new ActionListener() {  
 +            @Override 
 +            ​public void actionPerformed(ActionEvent e) {             
 +                numClicks++
 +            } 
 +        });
     }     }
-});+} 
 + 
 +// Cum ar putea arăta metoda addActionListener intern 
 +class JButton { 
 +    ... 
 +     
 +    public void addActionListener(ActionListener listener) { 
 +        // apelează metoda suprascrisă din clasa anonimă 
 +        listener.actionPerformed(this.event); 
 +    } 
 + 
 +    ... 
 +}
 </​code>​ </​code>​
  
 <note tip> <note tip>
-În acest exemplu, clasa anonimă implementează ''​ActionListener''​ și suprascrie metoda ''​actionPerformed'',​ iar implementarea rămâne ascunsă de restul aplicației.+  * În acest exemplu, clasa anonimă implementează ''​ActionListener''​ și suprascrie metoda ''​actionPerformed'',​ iar implementarea ​**rămâne ascunsă** de restul aplicației
 +  * Exemplul de mai sus folosește o **versiune simplificată** a clasei ''​JButton''​ pentru a ilustra exact de ce este nevoie să **pasăm o clasă ca argument** și cum putem **scurta codul folosind o clasă anonimă** pentru acest caz.
 </​note>​ </​note>​
  
poo-ca-cd/laboratoare/clase-interne-si-strings.1762425740.txt.gz · Last modified: 2025/11/06 12:42 by florian_luis.micu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0