
"ดังนั้น หัวข้อที่สองคือคลาสที่ซ้อนกันแบบคงที่ โปรดจำไว้ว่าคลาสที่ซ้อนกันแบบไม่คงที่เรียกว่าคลาสภายใน
"มาสรุปความหมายของคำว่า static ในบริบทของการประกาศคลาสซ้อนกัน คุณคิดอย่างไร"
"หากตัวแปรถูกประกาศเป็นสแตติก ก็จะมีสำเนาของตัวแปรเพียงชุดเดียว ดังนั้น หากคลาสที่ซ้อนกันเป็นแบบสแตติก หมายความว่าคุณสามารถสร้างออบเจกต์ของคลาสนั้นได้เพียงชิ้นเดียว"
"อย่าให้คำว่าstaticทำให้คุณสับสน มันเป็นความจริงที่หากตัวแปรถูกประกาศเป็น static ก็จะมีสำเนาของตัวแปรเพียงชุดเดียว แต่คลาสที่ซ้อนกันแบบ static นั้นเหมือนกับเมธอดแบบ static มากกว่าในเรื่องนี้ word static ก่อนการประกาศคลาสแสดงว่าคลาสนั้นไม่ได้เก็บการอ้างอิงถึงวัตถุของคลาสภายนอก"
"อ่า เมธอดปกติจะเก็บการอ้างอิงวัตถุโดยปริยาย แต่เมธอดสแตติกไม่เก็บ มันเหมือนกันกับคลาสสแตติก ฉันใช่ไหม เอลลี่"
"แน่นอน ความเข้าใจอย่างรวดเร็วของคุณน่ายกย่อง คลาสที่ซ้อนกันแบบสแตติกไม่มีการอ้างอิงที่ซ่อนอยู่ไปยังวัตถุของคลาสภายนอก"
class Zoo
{
private static int count = 7;
private int mouseCount = 1;
public static int getAnimalCount()
{
return count;
}
public int getMouseCount()
{
return mouseCount;
}
public static class Mouse
{
public Mouse()
{
}
public int getTotalCount()
{
return count + mouseCount; // Compilation error.
}
}
}
"ลองทบทวนตัวอย่างนี้อย่างละเอียด"
"ตัวแปรใดที่เมธอด getAnimalCount แบบคงที่สามารถเข้าถึงได้"
"เฉพาะแบบสแตติกเท่านั้น เพราะเป็นเมธอดแบบสแตติก"
"เมธอด getMouseCount เข้าถึงตัวแปรใดได้บ้าง"
"ทั้งแบบคงที่และไม่คงที่ มันมีการอ้างอิงที่ซ่อนอยู่ (สิ่งนี้) ไปยังวัตถุ Zoo"
"ถูกต้อง ดังนั้นคลาส Mouse ที่ซ้อนกันแบบสแตติก เช่น เมธอดแบบสแตติก สามารถเข้าถึงตัวแปรสแตติกของคลาส Zoo ได้ แต่ไม่สามารถเข้าถึงตัวแปรที่ไม่สแตติกได้"
"เราสามารถสร้างอ็อบเจกต์ Mouse ได้อย่างปลอดภัย แม้ว่าจะไม่ได้สร้างออบเจกต์ Zoo ขึ้นมาเลยก็ตาม นี่คือวิธีที่คุณสามารถทำได้:"
class Home
{
public static void main(String[] args)
{
Zoo.Mouse mouse = new Zoo.Mouse();
}
}
"คลาส Mouse เป็นคลาสธรรมดามาก ความจริงที่ว่ามันถูกประกาศในคลาส Zoo ทำให้มีคุณสมบัติพิเศษสองอย่าง"
1) เมื่อสร้างวัตถุของคลาสที่ซ้อนกัน (เช่นคลาส Mouse) นอกคลาสภายนอก คุณต้องใช้ตัวดำเนินการจุดเพื่อระบุชื่อของคลาสภายนอก
"เช่น: Zoo.Mouse"
2) คลาส Zoo.Mouse และวัตถุสามารถเข้าถึงตัวแปรและเมธอดสแตติกส่วนตัวของคลาส Zoo (เนื่องจากคลาส Mouse ถูกประกาศภายในคลาส Zoo ด้วย)
"ก็วันนี้แหละ"
“ก็แค่ชื่อเสริมแค่นั้นเอง?”
"ใช่."
"นั่นง่ายกว่าที่คิดในตอนแรก"
GO TO FULL VERSION