1. ชั้นเรียนภายใน
คุณเพิ่งเรียนรู้ว่ามีตัวแปรสแตติกและเมธอดสแตติก ปรากฎว่ามีคลาสคงที่ด้วย แต่เราจะเข้าใกล้หัวข้อนี้จากระยะไกล
ใน Java คุณได้รับอนุญาตให้ประกาศคลาสภายในคลาสได้ทั้งหมด และแม้แต่ชั้นเรียนภายในชั้นเรียนที่อยู่ภายในชั้นเรียนภายในชั้นเรียน ทุกอย่างดูเรียบง่ายมาก:
class OuterClass
{
variables of the class
methods of the class
class NestedClass
{
variables of the class
methods of the class
}
}
เราเพิ่งประกาศคลาสหนึ่งภายในอีกคลาสหนึ่ง ง่ายๆอย่างนั้น
ตัวอย่าง:
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;
}
}
คลาสที่ซ้อนกันอาจเป็นแบบคงที่หรือไม่คงที่ก็ได้ คลาสที่ซ้อนกันแบบคงที่เรียกง่ายๆ ว่าคลาสที่ซ้อนกันแบบคงที่ คลาสที่ซ้อนกันแบบไม่คงที่เรียกว่าคลาสภายใน ( คลาสภายใน )
2. คลาสคงที่
สามารถใช้คลาสที่ซ้อนกันแบบสแตติกนอกคลาสภายนอกได้ หากคลาสดังกล่าวมีตัวแก้ไขการเข้าถึงแบบสาธารณะ ก็สามารถใช้ได้ทุกที่ในโปรแกรม ชั้นเรียนดังกล่าวแทบจะแยกไม่ออกจากชั้นเรียนทั่วไป แต่มีความแตกต่างอยู่สองประการ
ชื่อชั้น
หากคุณต้องการอ้างถึงคลาสที่ซ้อนกันแบบสแตติกจากที่อื่นที่ไม่ใช่คลาสภายนอก คุณต้องระบุชื่อคลาส ซึ่งประกอบด้วยชื่อของคลาสภายนอกและชื่อของคลาสที่ซ้อนกัน นี่คือลักษณะทั่วไปของชื่อนี้:
OuterClass.InnerClass
ตัวอย่าง:
ชั้นนอก | คลาสที่ซ้อนกัน | ชื่อเต็มของคลาสที่ซ้อนกัน |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
หากคลาสที่ซ้อนกันมีคลาสที่ซ้อนกันของตัวเอง ชื่อจะถูกรวมเข้าด้วยกันโดยใช้จุด
ตัวอย่างทั่วไปของคลาสซ้อนใน JDK คือEntry
คลาสภายในMap
คลาส หากคุณต้องการรับชุดของคู่คีย์-ค่าที่จัดเก็บไว้ในHashMap
ออบเจกต์ ให้ใช้entrySet()
เมธอด ซึ่งจะคืนค่าaSet<Map.Entry>
โปรดทราบว่าเป็นตัวอย่างของคลาสภายนอกและคลาสที่ซ้อนกันMap.Entry
การสร้างวัตถุ
มันง่ายมากที่จะสร้างวัตถุของคลาสที่ซ้อนกันแบบคงที่ นี่คือลักษณะ:
OuterClass.NestedClass name = new OuterClass.NestedClass();
ทุกอย่างเหมือนกับคลาสทั่วไป แต่ชื่อประกอบด้วยสองส่วน
การเรียกเมธอดแบบสแตติก
หากคลาสสแตติกมีเมธอดสแตติก คุณสามารถเข้าถึงได้ด้วยวิธีเดียวกับเมธอดสแตติกของคลาสทั่วไป (แต่ชื่อคลาสจะประกอบด้วยสองส่วน)
OuterClass.NestedClass.staticMethod();
การเข้าถึงตัวแปรคงที่
การเข้าถึงตัวแปรสแตติกสาธารณะของคลาสที่ซ้อนกันก็ง่ายเช่นกัน:
OuterParent.NestedClass.nameOfStaticVariable
3. คุณสมบัติของคลาสสแตติก
คลาสที่ซ้อนกันแบบสแตติกมีเหตุผลน้อยที่สุดที่จะเรียกว่าสแตติก พวกเขาทำตัวเหมือนเรียนปกติ ไม่มีข้อ จำกัด ในการเข้าถึงจากวิธีการที่ไม่คงที่
หากคุณกำลังทำงานกับคลาสที่ซ้อนกันแบบสแตติกภายในคลาสภายนอก คุณจะไม่สังเกตเห็นความแตกต่างใดๆ จากคลาสธรรมดาที่สุด (ไม่ซ้อนและไม่สแตติก)
ตัวอย่าง:
คลาส Point ที่ซ้อนกันแบบคงที่ | ระดับคะแนนสามัญ |
---|---|
|
|
หากคุณนำคลาสที่ซ้อนกันแบบคงที่และย้ายออกจากคลาสภายนอก สิ่งเดียวที่จะเปลี่ยนแปลงคือคลาสใหม่จะไม่สามารถเข้าถึงprivate static
ตัวแปรและเมธอดของคลาสภายนอกเดิม ได้อีกต่อไป
ตัวอย่าง:
คลาส Point ที่ซ้อนกันแบบคงที่ | ระดับคะแนนสามัญ |
---|---|
|
|
เมธอด ใน คลาสmain
ธรรมดาไม่สามารถเข้าถึงตัวแปรของคลาสได้!Point
private static
points
Solution
นี่คือข้อแตกต่างที่สำคัญระหว่างคลาสซ้อนแบบสแตติกและคลาสธรรมดา private
เมธอดของคลาส ที่ซ้อนกันแบบสแตติกสามารถเข้าถึงตัวแปรสแตติกทั้งหมดและเมธอดของคลาสภายนอก แม้ว่าจะถูกประกาศ
และถ้าคุณคิดเกี่ยวกับมัน ทำไมจะต้องแปลกใจ? ตัวprivate
ดัดแปลงระบุอย่างชัดเจนว่าตัวแปรและเมธอดที่ทำเครื่องหมายโดยตัวดัดแปลงนี้สามารถเข้าถึงได้จากภายในคลาสเท่านั้น คลาสที่ซ้อนกันแบบคงที่อยู่ภายในคลาสภายนอกหรือไม่ ใช่ ไม่มีปัญหา! เข้าถึงได้มากเท่าที่คุณต้องการ
GO TO FULL VERSION