This shows you the differences between two versions of the page.
|
poo-ca-cd:laboratoare:clase-interne-si-strings [2025/11/06 12:45] florian_luis.micu [Clase interne normale] |
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 354: | 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 672: | 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> | ||