Sobes.tech
Middle

Koje vrste ugnježdenih klasa postoje?

sobes.tech АИ

Одговор од АИ

Staticke ugneždene klase i unutrašnje klase (nestaticke ugneždene klase).

  • Staticke ugneždene klase:

    • Deklarišu se ključnom riječi static.
    • Imaju pristup samo statičkim članovima (poljima i metodama) spoljašnje klase, uključujući privatne.
    • Nemaju direktan pristup nestatickim članovima spoljašnje klase.
    • Mogu biti kreirane bez instance spoljašnje klase.
    class Outer {
        private static int staticVar = 10;
        private int instanceVar = 20;
    
        static class StaticNested {
            void display() {
                System.out.println("Staticka varijabla: " + staticVar);
                // System.out.println("Instance varijabla: " + instanceVar); // Greška pri kompilaciji
            }
        }
    }
    
  • Unutrašnje klase (nestaticke ugneždene klase):

    • Deklarišu se bez ključne riječi static.
    • Imaju pun pristup svim članovima (statickim i nestatickim) spoljašnje klase, uključujući privatne.
    • Ne mogu sadržavati statičke članove (polja ili metode), osim finalnih konstanti.
    • Za njihovo kreiranje je potrebna instanca spoljašnje klase.
    class Outer {
        private static int staticVar = 10;
        private int instanceVar = 20;
    
        class Inner {
            void display() {
                System.out.println("Staticka varijabla: " + staticVar);
                System.out.println("Instance varijabla: " + instanceVar);
            }
        }
    }
    
  • Lokalne klase:

    • Deklarišu se unutar metoda, konstruktora ili inicijalizacionih blokova.
    • Imaju pristup svim finalnim i efektivno finalnim lokalnim promenljivima, kao i članovima spoljašnje klase u kojoj su definisane.
    • Opseg njihove vidljivosti je ograničen na blok u kojem su deklarisane.
    class Outer {
        void myMethod() {
            final int localVar = 5; // Efektivno final
    
            class LocalInner {
                void display() {
                    System.out.println("Lokalna promenljiva: " + localVar);
                }
            }
    
            LocalInner local = new LocalInner();
            local.display();
        }
    }
    
  • Anonimne klase:

    • Bez imena.
    • Kreiraju se i instanciraju istovremeno.
    • Često se koriste za kreiranje implementacija interfejsa ili proširenja klasa.
    interface MyInterface {
        void doSomething();
    }
    
    class Outer {
        void myMethod() {
            MyInterface anon = new MyInterface() {
                @Override
                public void doSomething() {
                    System.out.println("Radi nešto anonimno.");
                }
            };
            anon.doSomething();
        }
    }
    

Osnovne razlike između statičkih ugneždenih klasa i unutrašnjih klasa:

Karakteristika Statička ugneždena klasa Unutrašnja klasa
Ključna riječ static Nema
Pristup članovima Samo do statičkih članova spoljašnje klase Sve članove spoljašnje klase
Kreiranje instance Bez instance spoljašnje klase Potreban je primerak spoljašnje klase