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

Indlejrede klasser i java

Lad os lære, hvad der er indlejrede klasser i java?

Indlejrede klasser i java

En klasse i en anden klasse er kendt som indlejret klasse. En indlejret klasse kan være privat.

Syntaks:

class A // outer class
{
   ......
   class B // nested class
   {
      .....
   }
}

Indlejrede klasser i java er opdelt i to, de er –

  • statiske indlejrede klasser.
  • ikke-statiske indlejrede klasser (indre klasser).

Statiske indlejrede klasser

Statisk indlejret klasse bruges til at knytte en klasse til dens ydre klasse. Det betyder virkelig, at den ikke kan få adgang til de ikke-statiske metoder eller medlemmer af dens ydre klasse uden først at oprette en forekomst af den klasse.

Syntaks:

class OuterClass 
{
   static class StaticNestedClass
   {
   }
}
OuterClass.StaticNestedClass obj = new OuterClass.StaticNestedClass();

Her er et eksempel på statiske indlejrede klasser java.

import java.util.*;
public class OuterClass
{
   static class NestedClass
   {
      public void display() 
      {
         System.out.println("static nested class example");
      }
   }
   public static void main(String[] args) 
   {
      OuterClass.NestedClass nested = new OuterClass.NestedClass();	 
      nested.display();
   }
}

Output:

eksempel på statisk indlejret klasse

Ikke-statisk indlejret klasse eller indre klasse

Ikke-statiske indlejrede klasser eller en indre klasse er en klasse, der er medlem af den ydre klasse.

En klasse i java kan ikke være privat. Men en indre klasse i java er medlem af en anden klasse kan være privat. Derfor kan du få adgang til private medlemmer af en klasse.

Typer af indre klasser i java.

  • Indre klasse
  • Metode lokal indre klasse
  • Anonyme indre klasser

Hvad er indre klasse i java: indre klasse er en klasse skabt i en klasse. Indre klasse kan ikke tilgås fra et objekt af ydre klasse. Lad os se et eksempel på indre klasse i java.

class OuterDemo
{
   int num;
   // inner class
   private class InnerDemo
   {
      public void display()
      {
         System.out.println("inner class");
      }
   }
   // access inner class from method within
   void printInner()
   {
      InnerDemo objInner = new InnerDemo();
      objInner.display();
   }
}
public class InnerClassExample
{
   public static void main(String[] args)
   {
      OuterDemo objOuter = new OuterDemo();
      objOuter.printInner();
   }
}

Output:

indre klasse

Sådan får du adgang til private medlemmer

Indre klasser bruges til at få adgang til private medlemmer af en klasse. Her er syntaksen for, hvordan man instansierer indre klasse.

OuterClass objOuter = new OuterClass(); 
OuterClass.InnerClass objInner = OuterClass.InnerClass();

Lad os se et eksempel på, hvordan man får adgang til private medlemmer af en klasse.

class OuterClass
{
   // outer class private variable
   private int number = 56;
   // inner class
   public class InnerClass
   {
      public int showNumber()
      {
         System.out.println("showNumber() method of inner class.");
         return number;
      }
   }
}
public class AccessPrivateMembers
{
   public static void main(String[] args)
   {
      OuterClass objOuter = new OuterClass();
      OuterClass.InnerClass objInner = objOuter.new InnerClass();
      System.out.println(objInner.showNumber());
   }
}

Output:

showNumber() metode for indre klasse.
56

Metode lokale indre klasser

En metode lokal indre klasse er klasse i en metode. Metodens omfang lokal indre klasse er begrænset inden for metoden.

Metode lokal indre klasse i java kan instansieres i metoden. Lad os se et eksempel på metode lokal indre klasse i java.

class Outer
{
   // outer class instance method
   void display()
   {
      int num = 96;
      // method-local inner class
      class MethodLocalInner
      {
         public void show()
         {
            System.out.println("in method local inner class " + num);
         }
      } // end of inner class
      // access method local inner class
      MethodLocalInner objInner = new MethodLocalInner();
      objInner.show();
   }
   public static void main(String[] args)
   {
      Outer objOuter = new Outer();
      objOuter.display();
   }
}

Output:

i metode lokal indre klasse 96

Anonym indre klasse i java

Anonym indre klasse er en indre klasse erklæret uden klassenavn. Anonym indre klasse bruges til at tilsidesætte metode for en grænseflade eller en klasse.

Anonyme indre klasser erklæres og instansieres på samme tid. Her er syntaksen.

AnonymousInner obj = new AnonymousInner() {
public void demoMethod() {

}
};

Anonymt indre klasseeksempel: Lad os først se et eksempel på, hvordan man tilsidesætter metode for en klasse.

abstract class Anonymous
{
   public abstract void display();
}
public class AnonymousInnerExample
{
   public static void main(String[] args)
   {
      Anonymous obj = new Anonymous() {
         public void display() {
            System.out.println("anonymous inner class example");
         }
      };
      obj.display();
   }
}

Output:

anonymt indre klasseeksempel

Lad os nu se et eksempel på, hvordan man videregiver anonym indre klasse som metodeargument.

interface HelloWorld
{
   String print();
}
public class AnonymousInnerDemo
{
   // method accepts object of interface HelloWorld
   public void display(HelloWorld m)
   {
      System.out.println(m.print() + "example of anonymous inner class as method argument.");
   }
   public static void main(String[] args)
   {
      AnonymousInnerDemo obj = new AnonymousInnerDemo();
      // pass an anonymous inner class as an argument
      obj.display(new HelloWorld() {
         public String print() {
            return "Hi! ";
         }
      });
   }
}

Output:

Hej! eksempel på anonym indre klasse som metodeargument.


Java tag