Java >> Java tutorial >  >> Tag >> class

Java indre klasse | Java indlejret klasse | Typer | Anonym, Statisk, Lokal

At definere en klasse til en anden klasse kaldes en indre Java-klasse eller Java-indlejret klasse . En indre klasse kan være standard, offentlig, beskyttet eller privat adgangsmodifikator. Men for den ydre klasse er den kun offentlig eller standard. Java indre klasse constructor kaldes med et nyt objekt af den indre klasse oprettet.

I dette selvstudie lærer du om en Java-indlejret indre klasse og typer med, hvordan du opretter og får adgang til alle typer eksempler.

Syntaks

Dette er den grundlæggende syntaks for den indlejrede indre klasse. Hvor den ene klasse er den ydre "OuterClassName", og den anden er den indre er "InnerClassName" eller indlejret klasse.

class OuterClassName {
   class InnerClassName {
   }
}

Typer af indre klasser i java

Der er 4 typer indlejrede indre klasser i Java:

  • En indlejret indre klasser (ikke-statisk indlejret klasse)
  • Anonym indre klasse (ikke-statisk indlejret klasse)
  • Metode Lokal indre klasse (ikke-statisk indlejret klasse)
  • Statiske indlejrede klasser

Vi vil også lære om en Nested Interface i java.

Eksempel på Java Nested indre klasse

Her er et eksempel på, hvordan man definerer den indlejrede indre klasse. En indre klasse kan få adgang til ydre klassevariabler og instanser for alle typer adgangsmodifikatorer.

Se nedenfor Java indre klasse eksempler (program/kode). Hvordan man opretter det og får adgang til indre klasse.

class OuterClass {

    // Nested inner class
    private class InnerClass {
        public void printMsg() {
            System.out.println("This is a Nested inner class");
        }
    }

    // Accessing  inner class from the method within
    void display_Inner() {
        InnerClass inner = new InnerClass();
        inner.printMsg();
    }
}

public class MyClass {

    public static void main(String args[]) {
        // Creating object of Outer Class
        OuterClass outer = new OuterClass();

        // Accessing the method.
        outer.display_Inner();
    }
}

Output: Dette er en indlejret indre klasse

Anonyme indre klasser

En uden navneklasser kaldes den anonyme indre klasse i java. Det bruges, hvis du har brug for at tilsidesætte metoden for klasse eller grænseflade. Der er 2 måder at definere Anonymous indre klasse på.

  1. Klasse (kan være abstrakt eller konkret).
  2. Grænseflade

Lad os se eksemplet Hvordan man opretter en Java Anonymous indre klasse ved hjælp af klasse. For Interface vil vi poste en separat detaljeret tutorial.

abstract class AnonymousInner {
    public abstract void myMethod();
}

class OuterClasses {

    public static void main(String args[]) {
        AnonymousInner inner = new AnonymousInner() {
            public void myMethod() {
                System.out.println("Anonymous inner class Examples");
            }
        };
        inner.myMethod();
    }
}

Output: Eksempler på anonym indre klasse

Statiske indlejrede klasser

Javas indre statiske klasse eller Static indlejrede klasse er logisk og teknisk set ikke en indre klasse, fordi tilføjelse af et statisk nøgleord i en klasse repræsenterer et medlem af den ydre klasse. Den kan ikke få adgang til ikke-statiske datamedlemmer og metoder.

En statisk klasse kan tilgås med ydre klassenavn.

Så nedenfor et eksempel på Java indre statiske klasse. Det er meget nemt at oprette en statisk klasse bare for at bruge et "statisk søgeord ” før undervisningen.

class OuterClass {

    // static Nested inner class
    static class InnerClass {
        public void printMsg() {
            System.out.println("This is a Static Nested inner class");
        }
    }
}

public class MyClass {

    public static void main(String args[]) {
        // Creating object of Outer Class
        OuterClass.InnerClass outerIn = new OuterClass.InnerClass();

        // Accessing the method.
        outerIn.printMsg();
    }
}

Output: Dette er en statisk indlejret indre klasse

Metode Lokale indre klasser

Du ved, vi kan skrive et Java-program, hvor en klasse inden for en metode. Denne type klasse kaldes en Methods lokal indre klasse. Samme som lokale variabler og felter i metoder, begrænsede den lokale indre klasse kun omfanget i en metode.

class LocalInner {

    private int number = 977;//instance variable

    void display() {
        class Local {
            void msg() {
                System.out.println("Local number " + number);
            }
        }
        Local l = new Local();
        l.msg();
    }

    public static void main(String args[]) {
        //creating object
        LocalInner localInner = new LocalInner();
        localInner.display();
    }

}

Output: Lokalnummer 977

Indlejret grænseflade i java

Så kommer den sidste del af dette kapitel, indlejret grænseflade.

Hvilken grænseflade, der er erklæret i en anden grænseflade eller klasse, er kendt som en indlejret grænseflade. Det skal henvises til af den ydre grænseflade eller klasse. indlejret grænseflade kan ikke tilgås direkte.

interface MyInterface {
    void show();

    interface Message {
        void msg();
    }
}

class NestedInterface implements MyInterface.Message {
    public void msg() {
        System.out.println("Java Nested interface Example");
    }

    public static void main(String args[]) {
        MyInterface.Message message = new NestedInterface();
        message.msg();
    }
}

Output: Eksempel på Java Nested-grænseflade

Brug af indre klasse i java

Her er nogle fordele/fordele ved at bruge en indlejret indre klasse i java:

  1. Indlejrede klasser (indre klasse) kan få adgang til alle medlemmer (datamedlemmer og metoder) af den ydre klasse, inklusive private.
  2. Indlejrede indre klasser bruges til at udvikle en mere læsbar og vedligeholdelig kode, fordi den logisk kun grupperer klasser og grænseflader ét sted.
  3. Kodeoptimering:Det kræver mindre kode at skrive.

Spørgsmål:Hvad er en lokal indre klasse eller lokal klasse i java?

Svar: A Metode Lokale indre klasser kaldes en lokal indre klasse, som ovenfor se dette eksempel.

Spørgsmål:Er der en konstruktør forbundet med indlejrede klasser?

Svar: Den indre klassekonstruktør kaldes kun, når du har oprettet et objekt af den.

MyOuter.MyInner inClass = outClass.new MyInner();

Den indlejrede klassekonstruktør starter ikke, før du opretter et objekt. Selv statiske blokke udføres, men instansblokke og konstruktører påkaldes ikke.

Skriv en kommentar, hvis du har nogen tvivl og forslag til denne tutorial.


Java tag