1. kelas batin

Sampeyan bubar sinau manawa ana variabel statis lan metode statis. Pranyata ana uga kelas statis. Nanging kita bakal nyedhaki topik iki saka kadohan.

Ing Jawa, sampeyan kabeh diijini ngumumake kelas ing kelas. Lan malah kelas ing kelas sing ana ing kelas ing kelas. Kabeh katon prasaja banget:

class OuterClass
{
   variables of the class
   methods of the class

   class NestedClass
   {
      variables of the class
      methods of the class
   }
}

Kita mung ngumumake kelas siji ing kelas liyane. Sesederhana kuwi.

Tuladha:

public class Solution
{
   static ArrayList<Point> points = new ArrayList<Point>();

   public static void main(String[] args)
   {
      Point point = new Point();
      point.x = 100;
      point.y = 200;
      points.add(point);
   }

   static class Point
   {
      int x;
      int y;
   }
}

Kelas nested bisa statis utawa non-statis. Kelas bersarang statis mung diarani kelas bersarang statis . Kelas bersarang non-statis diarani kelas batin ( kelas batin ).



2. Kelas statis

Kelas nested statis bisa digunakake ing njaba kelas njaba. Yen kelas kasebut nduweni modifier akses umum, mula bisa digunakake ing ngendi wae ing program kasebut. Kelas kasebut meh ora bisa dibedakake karo kelas biasa. Nanging ana sawetara beda.

Jeneng kelas

Yen sampeyan pengin ngrujuk menyang kelas nested statis saka nang endi wae liyane saka kelas njaba, sampeyan kudu nemtokake jeneng kelas, kang kasusun saka jeneng kelas njaba lan jeneng kelas nested. Mangkene tampilan umum jeneng iki:

OuterClass.InnerClass

Tuladha:

kelas njaba Kelas nested Jeneng lengkap kelas nested
com.codegym.Solution
Point
com.codegym.Solution.Point
java.util.Map
Entry
java.util.Map.Entry
java.util.Files
DirectoryStream
java.util.Files.DirectoryStream
java.nio.WindowsPath
Closeable
java.nio.WindowsPath.Closeable

Yen kelas nested duwe kelas nested dhewe, jenenge mung digabung nganggo titik.

Conto khas kelas nested ing JDK yaiku Entrykelas ing njero Mapkelas. Yen sampeyan pengin entuk set pasangan kunci-nilai sing disimpen ing obyek HashMap, banjur gunakake entrySet()metode kasebut, sing ngasilake .Set<Map.Entry>

Elinga yen iku conto saka kelas njaba lan kelas nested.Map.Entry

Nggawe obyek

Iku gampang banget kanggo nggawe obyek saka kelas nested statis. Mangkene tampilane:

OuterClass.NestedClass name = new OuterClass.NestedClass();

Iku kabeh padha karo kelas biasa, nanging jeneng kasusun saka rong bagéan.

Nelpon cara statis

Yen kelas statis duwe cara statis, sampeyan bisa ngakses kanthi cara sing padha karo cara statis kelas biasa (nanging jeneng kelas bakal kalebu rong bagean).

OuterClass.NestedClass.staticMethod();

Ngakses variabel statis

Ngakses variabel statis umum saka kelas bersarang uga gampang:

OuterParent.NestedClass.nameOfStaticVariable


3. Fitur saka kelas statis

Kelas bersarang statis duwe alasan paling sithik kanggo diarani statis. Padha tumindak kaya kelas biasa . Ora ana watesan kanggo ngakses saka cara non-statis.

Yen sampeyan lagi nggarap kelas nested statis nang kelas njaba, sampeyan ora bakal sok dong mirsani prabédan saka kelas paling biasa (ora nested lan ora statis).

Tuladha:

Statis nested Point kelas Kelas Point Biasa.
public class Solution
{
   static ArrayList<Point> points;

   public static void main(String[] args)
   {
      Point point = new Point();
      point.x = 100;
      point.y = 200;
      points = new ArrayList<Point>();
      points.add(point);
   }

   static class Point
   {
      int x;
      int y;
   }
}
public class Solution
{
   static ArrayList<Point> points;

   public static void main(String[] args)
   {
      Point point = new Point();
      point.x = 100;
      point.y = 200;
      points = new ArrayList<Point>();
      points.add(point);
   }
}

class Point
{
   int x;
   int y;
}

Yen sampeyan njupuk sawetara kelas nested statis lan pindhah metu saka kelas njaba sawijining, mung bab sing bakal ngganti iku kelas anyar ora maneh bisa ngakses private staticvariabel lan cara saka mantan kelas njaba.

Tuladha:

Statis nested Point kelas Kelas Point Biasa.
public class Solution
{
   private static ArrayList<Point> points;

   static class Point
   {
      int x;
      int y;

      public static void main(String[] args)
      {
         Point point = new Point();
         point.x = 100;
         point.y = 200;

         // This will work
         points = new ArrayList<Point>();
         points.add(point);
      }
   }
}
public class Solution
{
   private static ArrayList<Point> points;
}

class Point
{
   int x;
   int y;

   public static void main(String[] args)
   {
      Point point = new Point();
      point.x = 100;
      point.y = 200;

      // This will generate an error
      points = new ArrayList<Point>();
      points.add(point);
   }
}

Cara ing kelas mainbiasa ora bisa ngakses variabel kelas !Pointprivate static pointsSolution

Iki prabédan utama antarane kelas nested statis lan kelas biasa. Metode kelas nested statis bisa ngakses kabeh variabel statis lan metode kelas njaba, sanajan diumumake private.

Lan yen sampeyan mikir babagan iki, kenapa kudu kaget? Modifier kasebut privatekanthi tegas nyatakake yen variabel lan metode sing ditandhani dening modifier iki mung bisa diakses saka kelase. Apa kelas nested statis ing njero kelas njaba? Ya, dadi ora masalah! Ngakses wong akeh sing pengin.