Sobes.tech
Middle

Aké typy vnorených tried existujú v jazyku programovania?

sobes.tech AI

Odpoveď od AI

Vnorené triedy v Jave:

  1. Statické vnorené triedy (Static Nested Classes): Správajú sa ako bežné statické členy triedy. Nemajú prístup k nestatickým členom vonkajšej triedy. Sú vytvorené bez inštancie vonkajšej triedy.

    public class Outer {
        private static String staticMsg = "Statická správa";
        private String instanceMsg = "Inštančná správa";
    
        static class StaticNested {
            void displayStatic() {
                // Prístup k statickým členom vonkajšej triedy
                System.out.println(staticMsg);
                // Žiadny prístup k nestatickým členom vonkajšej triedy
                // System.out.println(instanceMsg); // Chyba kompilácie
            }
        }
    }
    
  2. Vnorené triedy (Inner Classes): Sú viazané na inštanciu vonkajšej triedy. Majú úplný prístup ku všetkým (static a non-static) členom vonkajšej triedy, vrátane súkromných. Môžu byť deklarované ako private, protected, package-private alebo public.

    public class Outer {
        private static String staticMsg = "Statická správa";
        private String instanceMsg = "Inštančná správa";
    
        class Inner {
            void display() {
                // Prístup k statickým a nestatickým členom vonkajšej triedy
                System.out.println(staticMsg);
                System.out.println(instanceMsg);
            }
        }
    }
    
  3. Lokálne triedy (Local Classes): Sú deklarované v rámci bloku (metódy, konštruktora alebo statického inicializátora). Sú dostupné iba v rámci tohto bloku. Môžu pristupovať k final alebo efektívne final lokálnym premenným a parametrom bloku, ako aj ku všetkým členom vonkajšej triedy.

    public class Outer {
        private String instanceMsg = "Inštančná správa";
    
        void methodWithLocalClass() {
            final String localVar = "Lokálna premenná"; // alebo efektívne final
    
            class Local {
                void display() {
                    System.out.println(instanceMsg);
                    System.out.println(localVar);
                }
            }
    
            Local localObj = new Local();
            localObj.display();
        }
    }
    
  4. Anonymné triedy (Anonymous Classes): Sú to lokálne triedy bez mena. Používajú sa na súčasné deklarovanie a vytvorenie inštancie triedy, ktorá buď implementuje rozhranie, alebo rozširuje triedu. Sú vhodné na vytváranie malých, jednorazovo použitelných objektov.

    public class Outer {
        void methodWithAnonymousClass() {
            // Anonymná trieda implementujúca rozhranie Runnable
            Runnable myRunnable = new Runnable() {
                @Override
                public void run() {
                    System.out.println("Beží z anonymnej triedy");
                }
            };
            new Thread(myRunnable).start();
    
            // Anonymná trieda rozširujúca triedu Thread
            Thread myThread = new Thread() {
                @Override
                public void run() {
                    System.out.println("Beží z anonymnej triedy rozširujúcej Thread");
                }
            };
            myThread.start();
        }
    }
    

Porovnanie typov vnorených tried:

Typ triedy Miesto deklarácie Prístup k členom vonkajšej triedy Potreba inštancie vonkajšej triedy na vytvorenie Modifikátory prístupu
Statická vnorená Vo vnútri triedy, s kľúčovým slovom static. Iba k statickým. Nie Všetky
Vnorená (Inner) Vo vnútri triedy (ne statická). Ku všetkým (statickým aj nestatickým). Áno Všetky
Lokálna Vo vnútri bloku (metódy, konštruktory, inicializátory). Ku všetkým členom vonkajšej + final/efektívne final lokálnym. Áno Nie (final alebo abstract implicitne)
Anonymná Vo vnútri bloku (výraz). Ku všetkým členom vonkajšej + final/efektívne final lokálnym. Áno Nie