“สวัสดี อามีโก้!”
"อีกหัวข้อเล็ก ๆ น้อย ๆ คือชั้นเรียนในท้องถิ่น "
"อย่างที่คุณได้เห็น คุณสามารถสร้างคลาสได้ไม่เฉพาะในไฟล์ที่แยกจากกันเท่านั้น แต่ยังรวมถึงภายในคลาสอื่นๆ ด้วย แต่นั่นไม่ใช่ทั้งหมด คลาสยังสามารถสร้างได้ภายในเมธอด คลาสเหล่านี้เรียกว่าคลาสโลคัล พวกมันทำงานเหมือนคลาสภายในทั่วไป แต่ สามารถใช้ภายในวิธีการที่ประกาศไว้"
"ดูที่หน้าจอ:"
class Car
{
public ArrayListcreatePoliceCars(int count)
{
ArrayList result = new ArrayList();
class PoliceCar extends Car
{
int policeNumber;
PoliceCar(int policeNumber)
{
this.policeNumber = policeNumber;
}
}
for(int i = 0; i < count; i++)
result.add(new PoliceCar(i));
return result;
}
}
"ทำไมเราถึงต้องการชั้นเรียนดังกล่าว"
"การวางคลาสด้วยตัวสร้างและเมธอดทั้งหมดภายในเมธอดไม่ได้สร้างโค้ดที่อ่านง่าย คุณว่าไหม"
"ถูกต้อง คุณพูดถูกจริงๆ"
"คุณยังสามารถใช้คลาสภายในที่ไม่ระบุชื่อภายในเมธอดได้ แต่คลาสเหล่านี้มีข้อดีเล็กน้อยอย่างหนึ่ง และด้วยเหตุนี้ คลาสเหล่านี้จึงถูกใช้ในเมธอดค่อนข้างบ่อย"
"คลาสที่ประกาศภายในเมธอดสามารถใช้ตัวแปรโลคัลของเมธอดนั้นได้:"
class Car
{
public ArrayListcreatePoliceCars(int count)
{
ArrayList result = new ArrayList();
for(int i = 0; i < count; i++)
{
final int number = i;
result.add(new Car()
{
int policeNumber = number;
});
}
return result;
}
}
"แต่มีข้อจำกัดอย่างหนึ่งคือ ตัวแปรเป็น «อ่านอย่างเดียว»—ไม่สามารถเปลี่ยนแปลงได้"
"นี่คือเหตุผลว่าทำไมถึงมีข้อจำกัด:"
"คลาสที่ประกาศภายในเมธอดสามารถเข้าถึงตัวแปรของเมธอดที่ประกาศโดยใช้คีย์เวิร์ดสุดท้ายเท่านั้น ในตัวอย่างข้างต้น คุณจะเห็นว่าฉันไม่สามารถกำหนดค่า i ให้กับ policeNumber ได้ในทันที แต่ฉันจะบันทึกลงใน หมายเลขตัวแปรสุดท้าย"
"ความสามารถในการใช้ตัวแปรของเมธอดนั้นยอดเยี่ยมมาก ฉันหวังว่าจะขอบคุณมันอย่างเหมาะสม มันแย่เกินไปที่คุณไม่สามารถเปลี่ยนตัวแปรได้"
“วันนี้ Ellie จะอธิบายให้คุณฟังว่าทำไมคุณถึงเปลี่ยนมันไม่ได้ ระหว่างนี้ ฉันจะไปงีบสักชั่วโมงหนึ่ง”
"ฝันดีคิม ขอบคุณสำหรับบทเรียนที่น่าสนใจ"
GO TO FULL VERSION