บทที่ 7

จุดประสงค์เชิงพฤติกรรม (Behavioral Objectives)
หลังจากศึกษาจบบทเรียนนี้แล้ว ผู้เรียนจะมีความสามารถดังนี้
1. ยกตัวอย่างการประกาศ Inner Class แบบสถิต
2. อธิบายสมาชิกของคลาสรูปแบบต่างๆ
3. ยกตัวอย่างคลาสเฉพาะที่
4. อธิบายการสร้างคลาสนิรนามภายใน


สมาชิกคลาสแบบสถิต (Static Member Classes)
มีการประกาศ Inner Class ถูกประกาศให้เป็นแบบสถิต (static) เช่นตัวอย่าง

ตัวอย่างที่ 7.1


ผลการรันโปรแกรมตัวอย่างที่ 7.1

Inner Class ที่ชื่อ InsideClass จะต้องประกาศแบบ Static ของคลาส OutsideClass รวมถึง Static
เมธอดที่ชื่อ insideClassMethod() เมื่อคอมไพล์จะพบไฟล์ OutsideClass.class และ OutsideClass
SInsideClass.class ไฟล์ .class ของ Inside คือ Inner Class ที่อยู่ภายในคลาส OutsideClass
คลาสอื่นๆ ไมาสามารถเข้าถึงได้โดยตรง แต่จะต้องผ่านคลาส OutsideClass มาก่อน เช่น OutsideClass.
InsideClass.insideClassMethod("Hello"); 

สมาชิกของคลาส (Member Classes)
เราจะพบว่า InsideClass จะเป็นคลาสภายในเพราะถูกเรียกใช้โดยตรงจาก OutsideClass
ซึ่งภายใต้ขอบเขตของ InsideClass ก็จะเป็นสมาชิก (Member Classes) ของ OutsideClass แต่ก็มี        Inner Class ที่ไม่ประกาศเป็นแบบสถิต แต่โดยการประกาศนอกตัวคลาส OutsideClass จึงทำให้ต้อง
พิจารณาว่าการใช้งานนั้นจะต้องมีกฎอย่างไร คือ
1. ตัวแปรหรือสมาชิกของ OutsideClass สามารถเข้าถึงได้โดย Inner Class
2. ตัวแปรหรือสมาชิกของ InsideClass ไม่สามารถเข้าถึงได้จาก OutsideClass
3. ตัวแปรหรือสมาชิกของ Inner Class สามารถเข้าถึงได้เฉพาะ Inside Class เท่านั้น


คลาสเฉพาะที่ (Local Classes)
คลาสเฉพาะที่เป็นแบบ lnner Class แต่ประกาศไว้ภายในเมธอดของคลาสหลัก ซึ่งคลาสเฉพาะที่นั้นสามารถเข้าถึงสมาชิกภายในตัวมัน และสมาชิกของคลาสหลักที่เป็นแบบ final เท่านั้น

ตัวอย่างที่ 7.2

ผลการรันโปรแกรมตัวอย่างที่ 7.2

จากตัวอย่างมีคลาส LocalClass ประกาศไว้ภายในเมธอดของคลาส MainClass จึงสามารถเข้าถึงตัวแปรที่เป็น final ของเมธอด mainMethod ของคลาส LocalClass ซึงตัวแปรแบบ Non-final จะถูกประกาสในตัวของ MainClass

คลาสนิรนามภายใน (Anenymous lnner Classes)
คลาสนิรนามนั้นเป็นคลาสที่ไม่มีการระบุชื่อโดยภาจาวาอนุญาตให้สามารถสร้างคลาสแบบนี้ได้แต่จะต้องทำการสร้างตีวแปรหรือตัวแทน (lnstantiate) ทันทีท่ประกาศ ดังเคยยกตัวอย่างมาก่อนแล้วจึงขอนำโค้ดบางส่วนมาแสดงเพื่ออธิบายให้เข้าใจกลไก ดดยที่คลาสแบบนี้มักใช้กับการเฝ้าฟังเหตุการณ์ เช่น

จากโค้ดข้างต้น การเป็นคลาสนิรนามแบบ lnner Class ของ WindowAdapter ข้อดีของการใฃ้วิธีนี้คือ สามารถอ่านโค้ดได้ทันทีที่มีประกาศ แต่ข้อเสียคืแ เราไม่สามารถใช้งานจากคลาสอื่นได้ คือ ไม่สามารถ Reuse นั่นเอง

ความคิดเห็น