Sobes.tech
Middle

Kādi ir iekšējo klasu veidi programmēšanas valodā?

sobes.tech AI

Atbilde no AI

Java iekšējās klases:

  1. Statiskās iekšējās klases (Static Nested Classes): Uzvedas kā parasti statiskie klases locekļi. Tām nav piekļuves ārējās klases nestatiskajiem locekļiem. Tās tiek izveidotas bez ārējās klases eksemplāra.

    public class Outer {
        private static String staticMsg = "Statiska ziņa";
        private String instanceMsg = "Instanču ziņa";
    
        static class StaticNested {
            void displayStatic() {
                // Piekļuve ārējās klases statiskajiem locekļiem
                System.out.println(staticMsg);
                // Nav piekļuves ārējās klases nestatiskajiem locekļiem
                // System.out.println(instanceMsg); // Kompilācijas kļūda
            }
        }
    }
    
  2. Iekšējās klases (Inner Classes): Ir saistītas ar ārējās klases eksemplāru. Tām ir pilna piekļuve visiem (statiskajiem un nestatiskajiem) locekļiem, ieskaitot privātos. Tās var būt deklarētas kā private, protected, package-private vai public.

    public class Outer {
        private static String staticMsg = "Statiska ziņa";
        private String instanceMsg = "Instanču ziņa";
    
        class Inner {
            void display() {
                // Piekļuve statiskajiem un nestatiskajiem locekļiem
                System.out.println(staticMsg);
                System.out.println(instanceMsg);
            }
        }
    }
    
  3. Vietējās klases (Local Classes): Deklarētas bloka iekšienē (metodā, konstruktora vai statiskajā inicializatorā). Tām ir piekļuve tikai šajā blokā. Tās var piekļūt final vai efektīvi final vietējiem mainīgajiem un parametriem, kā arī visiem ārējiem locekļiem.

    public class Outer {
        private String instanceMsg = "Instanču ziņa";
    
        void methodWithLocalClass() {
            final String localVar = "Vietējā mainīgā"; // vai efektīvi final
    
            class Local {
                void display() {
                    System.out.println(instanceMsg);
                    System.out.println(localVar);
                }
            }
    
            Local localObj = new Local();
            localObj.display();
        }
    }
    
  4. Anonīmās klases (Anonymous Classes): Bezvārdu vietējās klases. Tās tiek deklarētas un izveidotas vienlaikus, kas realizē interfeisu vai paplašina klasi. Tās ir noderīgas mazām, vienreizējām objektiem.

    public class Outer {
        void methodWithAnonymousClass() {
            // Anonīma klase, kas realizē Runnable interfeisu
            Runnable myRunnable = new Runnable() {
                @Override
                public void run() {
                    System.out.println("Darbojas no anonīmās klases");
                }
            };
            new Thread(myRunnable).start();
    
            // Thread klases paplašināšana ar anonīmu klasi
            Thread myThread = new Thread() {
                @Override
                public void run() {
                    System.out.println("Darbojas no Thread paplašinātas anonīmās klases");
                }
            };
            myThread.start();
        }
    }
    

Salīdzinājums starp iekšējām klasēm:

Tips Deklarācijas vieta Pieeja ārējās klases locekļiem Nepieciešams ārējās klases eksemplārs Modifikatori
Statiskā iekšējā klase Klases iekšpusē, ar static Tikai statiskajiem Visi
Iekšējā klase (Inner) Klases iekšpusē (ne statiskā) Visu (statisko un nestatisko) Visi
Vietējā klase Bloka iekšpusē (metodā, konstruktors, inicializators) Visu ārējo + final vai efektīvi final vietējo