สิ่งที่ฉันอยากรู้คือเหตุใด java จึงห้ามใช้ static fields / method ในคลาสภายใน
เนื่องจากคลาสภายในเหล่านั้นเป็นคลาสภายใน "อินสแตนซ์" นั่นคือเป็นเหมือนแอตทริบิวต์อินสแตนซ์ของวัตถุที่ปิดล้อม
เนื่องจากเป็นคลาส "อินสแตนซ์" จึงไม่สมเหตุสมผลที่จะอนุญาตให้ใช้staticคุณลักษณะเนื่องจากstaticมีไว้เพื่อทำงานโดยไม่มีอินสแตนซ์ตั้งแต่แรก
เหมือนกับว่าคุณพยายามสร้างแอตทริบิวต์แบบคงที่ / อินสแตนซ์ในเวลาเดียวกัน
ใช้ตัวอย่างต่อไปนี้:
class Employee {
public String name;
}
หากคุณสร้างพนักงานสองอินสแตนซ์:
Employee a = new Employee();
a.name = "Oscar";
Employee b = new Employee();
b.name = "jcyang";
เป็นที่ชัดเจนว่าทำไมแต่ละคนจึงมีมูลค่าของทรัพย์สินnameใช่ไหม?
สิ่งเดียวกันนี้เกิดขึ้นกับชั้นใน อินสแตนซ์คลาสภายในแต่ละอินสแตนซ์ไม่ขึ้นกับอินสแตนซ์คลาสภายในอื่น ๆ
ดังนั้นหากคุณพยายามสร้างcounterแอตทริบิวต์คลาสไม่มีวิธีใดที่จะแชร์ค่านั้นกับอินสแตนซ์สองอินสแตนซ์ที่แตกต่างกัน
class Employee {
public String name;
class InnerData {
static count;
}
}
เมื่อคุณสร้างอินสแตนซ์aและbในตัวอย่างด้านบนค่าที่ถูกต้องสำหรับตัวแปรคงcountคืออะไร ไม่สามารถระบุได้เนื่องจากการมีอยู่ของInnerDataคลาสขึ้นอยู่กับวัตถุที่ปิดล้อมแต่ละชิ้น
นั่นเป็นเหตุผลว่าทำไมเมื่อชั้นเรียนถูกประกาศว่าstaticมันไม่จำเป็นต้องมีชีวิตอีกต่อไปเพื่อดำรงชีวิตด้วยตัวเอง เมื่อไม่มีการพึ่งพาแล้วคุณสามารถประกาศแอตทริบิวต์คงที่ได้อย่างอิสระ
ฉันคิดว่าสิ่งนี้ฟังดูย้ำ แต่ถ้าคุณคิดถึงความแตกต่างระหว่างอินสแตนซ์กับคุณสมบัติคลาสมันจะสมเหตุสมผล