1. Inner classes
Nalaman mo kamakailan na may mga static na variable at static na pamamaraan. Ito ay lumiliko na mayroon ding mga static na klase. Ngunit lalapitan natin ang paksang ito mula sa malayo.
Sa Java, ganap kang pinapayagang magdeklara ng mga klase sa loob ng mga klase. At maging ang mga klase sa loob ng mga klase na nasa loob ng mga klase sa loob ng mga klase. Ang lahat ay mukhang napaka-simple:
class OuterClass
{
variables of the class
methods of the class
class NestedClass
{
variables of the class
methods of the class
}
}
Nagdedeklara lang kami ng isang klase sa loob ng isa pa. As simple as that.
Halimbawa:
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;
}
}
Ang mga nested na klase ay maaaring static o non-static. Ang mga static na nested na klase ay tinatawag na mga static na nested na klase . Ang mga non-static na nested na klase ay tinatawag na mga panloob na klase ( mga panloob na klase ).
2. Mga static na klase
Maaaring gamitin ang mga static na nested na klase sa labas ng kanilang panlabas na klase. Kung ang naturang klase ay may pampublikong access modifier, maaari itong magamit kahit saan sa programa. Ang ganitong mga klase ay halos hindi nakikilala sa anumang ordinaryong klase. Ngunit mayroong ilang mga pagkakaiba.
Pangalan ng klase
Kung gusto mong sumangguni sa isang static na nested na klase mula sa isang lugar maliban sa panlabas na klase nito, kailangan mong tukuyin ang pangalan ng klase, na binubuo ng pangalan ng panlabas na klase at ang pangalan ng nested na klase. Narito ang pangkalahatang hitsura ng pangalang ito:
OuterClass.InnerClass
Mga halimbawa:
Outer class | Nested na klase | Buong pangalan ng nested class |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
Kung ang isang nested class ay may sarili nitong nested class, ang kanilang mga pangalan ay isasama lang gamit ang isang tuldok.
Ang karaniwang halimbawa ng isang nested na klase sa JDK ay ang Entry
klase sa loob ng Map
klase. Kung nais mong makuha ang hanay ng mga pares ng key-value na naka-imbak sa isang HashMap
bagay, pagkatapos ay gamitin ang entrySet()
pamamaraan, na nagbabalik ng isang .Set<Map.Entry>
Tandaan na ito ay isang halimbawa ng isang panlabas na klase at isang nested na klase.Map.Entry
Paglikha ng isang bagay
Napakadaling gumawa ng object ng isang static na nested class. Ganito ang hitsura nito:
OuterClass.NestedClass name = new OuterClass.NestedClass();
Pareho lang ito sa mga ordinaryong klase, ngunit ang pangalan ay binubuo ng dalawang bahagi.
Pagtawag ng mga static na pamamaraan
Kung ang isang static na klase ay may mga static na pamamaraan, maaari mong ma-access ang mga ito sa parehong paraan tulad ng mga static na pamamaraan ng mga ordinaryong klase (ngunit ang pangalan ng klase ay binubuo ng dalawang bahagi).
OuterClass.NestedClass.staticMethod();
Pag-access sa mga static na variable
Madali din ang pag-access sa mga pampublikong static na variable ng isang nested class:
OuterParent.NestedClass.nameOfStaticVariable
3. Mga tampok ng mga static na klase
Ang mga static na nested na klase ay may pinakamababang dahilan para tawaging static. Sila ay kumikilos tulad ng mga regular na klase . Walang mga paghihigpit sa pag-access sa mga ito mula sa mga non-static na pamamaraan.
Kung nagtatrabaho ka sa isang static na nested na klase sa loob ng panlabas na klase nito, hindi mo mapapansin ang anumang pagkakaiba mula sa pinakakaraniwan (hindi nested at hindi static) na klase.
Halimbawa:
Static na nested Point class | Klase ng Ordinaryong Punto. |
---|---|
|
|
Kung kukuha ka ng ilang static na nested class at ililipat ito sa panlabas na klase nito, ang magbabago lang ay hindi na maa-access ng bagong klase ang private static
mga variable at pamamaraan ng dating panlabas na klase nito.
Halimbawa:
Static na nested Point class | Klase ng Ordinaryong Punto. |
---|---|
|
|
Ang main
pamamaraan sa ordinaryong Point
klase ay hindi ma-access ang private static
points
variable ng Solution
klase!
Ito ang pangunahing pagkakaiba sa pagitan ng isang static na nested na klase at isang ordinaryong klase. Ang mga pamamaraan ng isang static na nested na klase ay maaaring ma-access ang lahat ng mga static na variable at pamamaraan ng kanilang panlabas na klase, kahit na sila ay idineklara private
.
At kung iisipin mo, bakit ito nakakagulat? Malinaw na sinasabi ng private
modifier na ang mga variable at pamamaraan na minarkahan ng modifier na ito ay maa-access lamang mula sa loob ng kanilang klase. Ang isang static na nested na klase ba ay nasa loob ng panlabas na klase nito? Oo, kaya walang problema! I-access ang mga ito hangga't gusto mo.
GO TO FULL VERSION