Sobes.tech
Middle

Koje vrste ugnježdenih klasa postoje u jeziku programiranja?

sobes.tech АИ

Одговор од АИ

Ugnježdene klase u Javi:

  1. Statičke ugnježdene klase (Static Nested Classes): Ponašaju se kao obični statički članovi klase. Nemaju pristup nestatičkim članovima spoljašnje klase. Kreiraju se bez instance spoljašnje klase.

    public class Outer {
        private static String staticMsg = "Staticka poruka";
        private String instanceMsg = "Poruka instance";
    
        static class StaticNested {
            void displayStatic() {
                // Pristup statičkim članovima spoljašnje klase
                System.out.println(staticMsg);
                // Nema pristupa nestatičkim članovima spoljašnje klase
                // System.out.println(instanceMsg); // Greška pri kompilaciji
            }
        }
    }
    
  2. Unutrašnje klase (Inner Classes): Povezane su sa instancom spoljašnje klase. Imaju pun pristup svim (statičkim i nestatičkim) članovima spoljašnje klase, uključujući privatne. Mogu biti deklarisane kao private, protected, package-private ili public.

    public class Outer {
        private static String staticMsg = "Staticka poruka";
        private String instanceMsg = "Poruka instance";
    
        class Inner {
            void display() {
                // Pristup statičkim i nestatičkim članovima
                System.out.println(staticMsg);
                System.out.println(instanceMsg);
            }
        }
    }
    
  3. Lokalne klase (Local Classes): Deklarišu se unutar bloka (metoda, konstruktora ili statičkog inicijalizatora). Dostupne su samo unutar tog bloka. Mogu referisati na final ili efektivno final lokalne promenljive i parametre, kao i na sve članove spoljašnje klase.

    public class Outer {
        private String instanceMsg = "Poruka instance";
    
        void methodWithLocalClass() {
            final String localVar = "Lokalna promenljiva"; // ili efektivno final
    
            class Local {
                void display() {
                    System.out.println(instanceMsg);
                    System.out.println(localVar);
                }
            }
    
            Local localObj = new Local();
            localObj.display();
        }
    }
    
  4. Anonimne klase (Anonymous Classes): Klase bez imena. Koriste se za istovremeno deklarisanje i kreiranje instance klase koja implementira interfejs ili proširuje klasu. Pogodne su za pravljenje malih, jednokratnih objekata.

    public class Outer {
        void methodWithAnonymousClass() {
            // Anonimna klasa koja implementira interfejs Runnable
            Runnable myRunnable = new Runnable() {
                @Override
                public void run() {
                    System.out.println("Pokreće se iz anonimne klase");
                }
            };
            new Thread(myRunnable).start();
    
            // Anonimna klasa koja proširuje klasu Thread
            Thread myThread = new Thread() {
                @Override
                public void run() {
                    System.out.println("Pokreće se iz anonimne klase koja proširuje Thread");
                }
            };
            myThread.start();
        }
    }
    

Uporedba vrsta ugniježđenih klasa:

Tip klase Mesto deklaracije Pristup članovima spoljašnje klase Potreban je primerak spoljašnje klase za kreiranje Modifikatori pristupa
Statička ugniježđena klasa Unutar klase, sa ključnom rečju static. Samo do statičkih. Ne Sve
Unutrašnja klasa Unutar klase (ne-statička). Do svih (statičkih i nestatičkih) članova. Da Sve
Lokalna klasa Unutar bloka (metoda, konstruktora, inicijalizatora). Do svih članova spoljašnje klase + final ili efektivno final lokalnih promenljivih i parametara. Da Ne (final ili abstract implicitno)
Anonimna klasa Unutar bloka (izraza). Do svih članova spoljašnje klase + final ili efektivno final lokalnih promenljivih i parametara. Da Ne