outer class สามารถเข้าใช้ private member ของ inner class ได้

ระหว่างที่ผมสอน Java ที่การทางพิเศษ มีนักเรียนคนหนึ่งสังเกตเห็นว่า outer class สามารถเข้าใช้ private member ของ inner class ได้

สอนคอมฟรี

public class Outer {
  class Inner {
    private int a;
    public int b;
  }

  void go() {
    Inner in = new Inner();
    in.a = 10;  // fine
  }
}

แต่คลาสอื่นไม่สามารถใช้ได้

public class Example {
  public static void main(String[] args) {
    Outer o = new Outer();
    Outer.Inner i = o.new Inner();
    i.a = 5;  // error here
    i.b = 7;
  }
}

คิดว่า Java มอง member ของ inner class ในระดับเดียวกับ member ของ outer class คือมองว่า private int a; ที่อยู่ใน inner เป็นเหมือนกับ private ของมันเอง

หากจะนำข้อความไปใช้ ต้องแสดงที่มา และห้ามใช้ในเชิงพาณิชย์

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s