Java Shadowing

ใน java variable นั้นมีหลายประเภทเช่น local variable , instance variable , class variable เป็นต้น 
แต่ละประเภทมี ขอบเขตการทำงาน(scope) ที่แตกต่างกัน
Java Shadowing เป็นการเขียน code ที่เขียน variable 2 ตัวที่มี ชื่อและ reference ถึงค่าตัวเดียวกัน ภายในขอบเขตการทำงาน(scope) ที่ซ้อนทับกัน
variable ที่ถูกเขียนก่อน (higher-level scope) จะถูกซ่อนไม่ทำงาน variable นั้นจะเป็น "shadowed"
variable ที่ถูกเขียนหลัง (lower-level scope) จะสวมทับและทำงานแทน variable ที่เป็น shadowed


A Local Variable And An Instance Variable Shadow 
ภายใน method เมื่อ Local Variable มีชื่อเหมือนกับ Instance Variable
Instance Variable ดังกล่าวจะเป็น shadowed ของ Local Variable ภายใน method นั้น 
กล่าวคือ Instance Variable ไม่ได้ถูก Override แต่มันถูกซ่อนเอาไว้เฉยๆไม่ทำงาน  ส่วน Local Variable จะทำงานแทน 
แต่คุณสามารถเรียก Instance Variable shadowed  มาทำงานได้โดยอ้างอิงถึง Instance Variable โดยตรงผ่านคำสั่ง this

ตัวอย่าง code



A Class Variable shadows the Inherited Variable from Its Parent Classes
เมื่อ Instance Variable ที่สร้างในคลาสลูก มีชื่อเดียวกับที่ได้รับสืบทอดมาจาก คลาสแม่ 
Instance Variable ของคลาสลูกจะทำหน้าที่แทน Instance Variable ที่ได้รับสืบทอดมาจาก คลาสแม่

ตัวอย่าง code


  

แต่เราก็สามารถเรียก Instance Variable  ของ คลาสแม่ มาทำงานได้เหมือนกัน โดยนำ Data Type ของคลาสแม่มาชี้ instance ของคลาสลูก โดย Instance Variable ของคลาสแม่ต้องระบุ Access Modifier เป็น public เท่านั้น

ตัวอย่าง code




ในตัวอย่างข้างต้นทั้ง cat และ animal ยังคง reference ถึง instance เดียวกัน
- cat มี Data type เป็นของ คลาสลูก Java Runtime จะใช้ Instance Variable ของคลาสลูก
- animal มี Data type เป็นของ คลาสแม่ Java Runtime จะใช้ Instance Variable ของคลาสแม่


ไม่มีความคิดเห็น:

แสดงความคิดเห็น