จากการศึกษาก่อนหน้านี้ เรารู้อยู่แล้วว่าคลาสสามารถมีสมาชิกที่สำคัญได้สองตัว: ตัวแปรสมาชิก และ วิธีการ ที่จริงแล้วคลาสก็มีสมาชิกประเภทหนึ่งเช่นกัน: คลาสภายใน เมื่อคลาสกำหนดคลาสอื่น เราจะเรียกคลาสดังกล่าวว่า คลาสภายใน และคลาสที่มีคลาสภายในเรียกว่า คลาสภายนอก ของคลาสภายใน
1) ตัวแปรสมาชิกของคลาสภายนอกของคลาสภายในยังคงใช้ได้ในคลาสภายใน และวิธีการในคลาสภายในยังสามารถเรียกวิธีการในคลาสภายนอกได้
2) ไม่สามารถประกาศตัวแปรคลาสและวิธีการเรียนในเนื้อหาคลาสของคลาสภายใน ในเนื้อหาคลาสของคลาสภายนอก คลาสภายในสามารถใช้เพื่อประกาศวัตถุเป็นสมาชิกของคลาสภายนอก
3) คลาสภายในสามารถใช้ได้โดยคลาสที่ซ้อนกันภายนอกเท่านั้น คลาสอื่น ๆ ไม่สามารถใช้คลาสภายในของคลาสใดคลาสหนึ่งเพื่อประกาศวัตถุ
เนื่องจากตัวแปรสมาชิกของคลาสชั้นนอกของคลาสชั้นในนั้นใช้ได้ในคลาสชั้นใน การโต้ตอบระหว่างคลาสชั้นในและคลาสชั้นนอกจึงสะดวกมาก
ตัวอย่างเช่น:
classRedCowForm{staticStringformName;RedCowcow;//วัตถุการประกาศคลาสภายใน RedCowForm(){}RedCowForm(Strings){cow=newRedCow(88,66,2000);formName=s;}publicvoidshowCowMess(){cow.speak();}classRedCow //การประกาศคลาสภายใน StringcowName=calf;intheight,weight,price;RedCow(inth,intw,intp){height=h;weight=w;price=p;}voidspeak(){System.out.println( I am +cowName+, ส่วนสูง+ส่วนสูง+ซม., น้ำหนัก+น้ำหนัก+กก., อาศัยอยู่ใน +formName);}}}publicclassMain{publicstaticvoidmain(String[]args){RedCowFormform=newRedCowForm(dotcpp farm);form.showCowMess(); วัว.พูด();}}
ผลการวิ่งมีดังนี้:
ฉันเป็นลูกวัว ฉันสูง 88 ซม. และหนัก 66 กก. ฉันอาศัยอยู่ในฟาร์ม dotcpp
หมายเหตุ : ชื่อของไฟล์ bytecode ของคลาสภายในที่สร้างโดยคอมไพเลอร์ Java นั้นแตกต่างจากชื่อของคลาสทั่วไป รูปแบบชื่อของไฟล์ bytecode ที่สอดคล้องกับคลาสภายในคือ " ชื่อคลาสที่ฝังตัว $ ชื่อคลาสภายใน " ตัวอย่างเช่น: ชื่อของไฟล์ bytecode ของคลาสภายในในตัวอย่างข้างต้นควรเป็น RedCowForm$RedCow.class
คลาสภายในสามารถแก้ไขได้เป็นคลาสภายในแบบคงที่เป็นประเภทข้อมูลคงที่ในคลาสที่ฝังตัว
โอเค ทุกคนสามารถทดลองบนคอมพิวเตอร์และแยกแยะและซึมซับเนื้อหาของส่วนนี้ได้