คลาสที่ประกาศอยู่ในคลาสแต่นอกเมธอด เรียกว่า member inner class
เราสามารถ instantiate member inner class ได้ 2 วิธี:
- Invoked within the class (เรียกใช้ภายในคลาส)
- Invoked outside the class (เรียกใช้นอกคลาส)
กฎสำหรับ Inner Class
- Outer class (คลาสที่มี inner class) สามารถ instantiate inner class objects ได้ไม่จำกัดจำนวน ภายในโค้ดของมัน
- ถ้า inner class เป็น public และ containing class ก็เป็น public โค้ดในคลาสอื่นที่ไม่เกี่ยวข้องก็สามารถสร้าง instance ของ inner class ได้
- ไม่มี inner class objects ที่ instantiate อัตโนมัติพร้อมกับ outer class object
- ถ้า inner class เป็น static static inner class สามารถ instantiate ได้โดยไม่ต้องมี outer class instance แต่ถ้าไม่ใช่ static inner class object ต้อง associated กับ instance ของ outer class
- Outer class สามารถเรียก private methods ของ inner class ได้
Member Inner Class ที่ invoked ภายในคลาส
ในตัวอย่างด้านล่าง เราเรียกเมธอดของ member inner class จากเมธอด display() ของ OuterClass
ตัวอย่าง
public class OuterClass {
private int value = 20;
class InnerClass {
void show() {
System.out.println("Value is: " + value);
}
}
void display() {
InnerClass ic = new InnerClass();
ic.show();
}
public static void main(String args[]){
OuterClass oc = new OuterClass();
oc.display();
}
}
Value is: 20
Member Inner Class ที่ invoked นอกคลาส
ในตัวอย่างด้านล่าง เราเรียกเมธอด show() ของ InnerClass จากนอก OuterClass คือคลาส Test
ตัวอย่าง
class OuterClass {
private int value = 20;
class InnerClass {
void show() {
System.out.println("Value is: "+ value);
}
}
}
public class Test {
public static void main(String args[]) {
OuterClass obj = new OuterClass();
OuterClass.InnerClass in = obj.new InnerClass();
in.show();
}
}
ผลลัพธ์
Value is: 20