Sobes.tech
Middle

Mis on sisemised klassid?

sobes.tech AI

Vastus AI-lt

Sisemine klass on klass, mis on määratletud teise klassi sees.

Java sisemiste klasside tüübid:

  • Staatiline sisemine klass (Static Nested Classes):

    • Saadaval välise klassi kaudu ilma selle eksemplarita.
    • Ei pääse otse välise klassi mitte-staatilistele väljadele ja meetoditele.
    • Deklareeritud static märksõnaga.
  • Sisemised klassid (Inner Classes):

    • Liige-sisemised klassid (Member Inner Classes):
      • Deklareeritakse välise klassi liikmetasandil.
      • Omavad juurdepääsu kõigile välise klassi liikmetele (sh privaatsed).
      • Nõuab välise klassi eksemplari, et luua oma eksemplar.
    • Kohalikud sisemised klassid (Local Inner Classes):
      • Deklareeritakse meetodi, konstruktor või initsialiseerimisbloki sees.
      • Nähtavad ainult selle meetodi/bloki piires.
      • Omavad juurdepääsu final või efektiivselt final kohalikele muutujatele välises kontekstis.
    • Anonüümsed sisemised klassid (Anonymous Inner Classes):
      • Klassid ilma nimega.
      • Kasutatakse objektide loomiseks, mis kohe rakendavad liidest või laiendavad klassi.
      • Deklareeritakse ja instantsiatsioon toimub ühe operatsiooniga.

Näide staatilisest sisemisest klassist:

class OuterClass {
    private static String msg = "Hello from Outer";

    static class StaticNestedClass {
        public void display() {
            // Võib pääseda välise klassi staatilistele liikmetele
            System.out.println(msg);
        }
    }
}
// Kasutamine
// OuterClass.StaticNestedClass nestedObject = new OuterClass.StaticNestedClass();
// nestedObject.display();

Näide liikme-sisemisest klassist:

class OuterClass {
    private String msg = "Hello from Outer";

    class InnerClass {
        public void display() {
            // Võib pääseda kõigile välise klassi liikmetele
            System.out.println(msg);
        }
    }
}
// Kasutamine
// OuterClass outerObject = new OuterClass();
// OuterClass.InnerClass innerObject = outerObject.new InnerClass();
// innerObject.display();

Sisemiste klasside kasutamise eelised:

  • Grupitamine: Loogiliselt seotud klassid võivad olla grupis.
  • Inkapulatsioon: Sisemised klassid võivad pääseda välise klassi privaatsesse liikmetesse, pakkudes paremat inkapsulatsiooni.
  • Lugemise ja hoolduse lihtsustamine: Peidavad abiklassid peamise klassi sees.
  • Tõhusus: Võivad olla kasulikud kompaktsete ja tõhusamate andmestruktuuride loomisel.