Showing posts with label Inner class. Show all posts
Showing posts with label Inner class. Show all posts

Tuesday, December 29, 2015

[Java] Inner class trong Java

a. Định nghĩa một Inner class.
Một Inner class được định nghĩa trong cặp dấu "{}" của Outer class.
package simplecodecjava.blogspot.com;

//Outer class - chứa Inner class
public class OuterClassDemo {
 private int myVar = 1;

 // Định nghĩa Inner class
 class InnerClassDemo {
  public void seeOuter() {
   System.out.println("Value of myVar is :" + myVar);
  }
 } // close Định nghĩa Inner class
} // close Định nghĩa Outer class
Inner class được định nghĩa trong cặp dấu "{}" nên Inner class được coi là một thành phần của Outer class, do đó Inner class cũng có thể định nghĩa phạm vi truy cập như đối với các biến của Outer class như: abstract, final, public, protected, private, static, đồng thời Inner class cũng có thể truy cập tới các các biến này. Ở ví dụ trên biến myVar được truy cập từ trong phương thức của Inner class.
b. Khởi tạo một đối tượng của Inner class.
Có 2 cách để khởi tạo một đối tượng có kiểu Inner class.
Khởi tạo Inner class thông qua khởi tạo Outer class.
Vì Inner class là một thành phần của Outer class do đó Inner class tồn tại bên trong một đối tượng của Outer class.
package simplecodecjava.blogspot.com;

//Outer class - chứa Inner class
public class OuterClassDemo {
 private int x = 1;

 public void innerInstance() {
  InnerClassDemo inner = new InnerClassDemo();
  inner.seeOuter();
 }

 public static void main(String args[]) {
  OuterClassDemo obj = new OuterClassDemo();
  obj.innerInstance();
 }

 // Định nghĩa Inner class
 class InnerClassDemo {
  public void seeOuter() {
   System.out.println("Giá strị của x is :" + x);
  }
 } // close định nghĩa Inner class
} // close Outer class
Output:
Giá trị của x is :1
Khơi tạo trực tiếp Inner class không cần khởi tạo Outer class
Inner class cũng được khởi tạo bằng từ khóa new.
 public static void main(String args[]) {
  OuterClassDemo.InnerClassDemo inner = new OuterClassDemo().new InnerClassDemo();
  inner. seeOuter();
 }