คลาสท้องถิ่น: คลาสภายในเมธอด - 1

“สวัสดี อามีโก้!”

"อีกหัวข้อเล็ก ๆ น้อย ๆ คือชั้นเรียนในท้องถิ่น "

"อย่างที่คุณได้เห็น คุณสามารถสร้างคลาสได้ไม่เฉพาะในไฟล์ที่แยกจากกันเท่านั้น แต่ยังรวมถึงภายในคลาสอื่นๆ ด้วย แต่นั่นไม่ใช่ทั้งหมด คลาสยังสามารถสร้างได้ภายในเมธอด คลาสเหล่านี้เรียกว่าคลาสโลคัล พวกมันทำงานเหมือนคลาสภายในทั่วไป แต่ สามารถใช้ภายในวิธีการที่ประกาศไว้"

"ดูที่หน้าจอ:"

ตัวอย่าง
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 จะอธิบายให้คุณฟังว่าทำไมคุณถึงเปลี่ยนมันไม่ได้ ระหว่างนี้ ฉันจะไปงีบสักชั่วโมงหนึ่ง”

"ฝันดีคิม ขอบคุณสำหรับบทเรียนที่น่าสนใจ"