Java tut 30 : Java Inner Classes

0
0
(0)

Java Inner Classes (Các lớp bên trong Java)

Trong Java, cũng có thể lồng các lớp (một lớp trong một lớp). Mục đích của các lớp lồng nhau là để nhóm các lớp thuộc lại với nhau, điều này làm cho mã của bạn dễ đọc và dễ bảo trì hơn.

Để truy cập lớp bên trong, hãy tạo một đối tượng của lớp bên ngoài, sau đó tạo một đối tượng của lớp bên trong:

Thí dụ

class OuterClass {
  int x = 10;

  class InnerClass {
    int y = 5;
  }
}

public class Main {
  public static void main(String[] args) {
    OuterClass myOuter = new OuterClass();
    OuterClass.InnerClass myInner = myOuter.new InnerClass();
    System.out.println(myInner.y + myOuter.x);
  }
}

// Outputs 15 (5 + 10)
 

Hãy tự mình thử »


Private Inner Class (Lớp bên trong riêng tư)

Không giống như một lớp “thông thường”, một lớp bên trong có thể là privatehoặc protected. Nếu bạn không muốn các đối tượng bên ngoài truy cập vào lớp bên trong, hãy khai báo lớp là private:

Thí dụ

class OuterClass {
  int x = 10;

  private class InnerClass {
    int y = 5;
  }
}

public class Main {
  public static void main(String[] args) {
    OuterClass myOuter = new OuterClass();
    OuterClass.InnerClass myInner = myOuter.new InnerClass();
    System.out.println(myInner.y + myOuter.x);
  }
}
 

Nếu bạn cố gắng truy cập vào một lớp bên trong riêng tư từ một lớp bên ngoài, một lỗi sẽ xảy ra:Main.java:13: error: OuterClass.InnerClass has private access in OuterClass
    OuterClass.InnerClass myInner = myOuter.new InnerClass();
              ^

Hãy tự mình thử »


Static Inner Class

Một lớp bên trong cũng có thể là static, có nghĩa là bạn có thể truy cập nó mà không cần tạo một đối tượng của lớp bên ngoài:

Thí dụ

class OuterClass {
  int x = 10;

  static class InnerClass {
    int y = 5;
  }
}

public class Main {
  public static void main(String[] args) {
    OuterClass.InnerClass myInner = new OuterClass.InnerClass();
    System.out.println(myInner.y);
  }
}

// Outputs 5
 

Hãy tự mình thử »

Lưu ý: cũng giống như staticcác thuộc tính và phương thức, một staticlớp bên trong không có quyền truy cập vào các thành viên của lớp bên ngoài.


Truy cập lớp bên ngoài từ lớp bên trong

Một ưu điểm của các lớp bên trong là chúng có thể truy cập các thuộc tính và phương thức của lớp bên ngoài:

Thí dụ

class OuterClass {
  int x = 10;

  class InnerClass {
    public int myInnerMethod() {
      return x;
    }
  }
}

public class Main {
  public static void main(String[] args) {
    OuterClass myOuter = new OuterClass();
    OuterClass.InnerClass myInner = myOuter.new InnerClass();
    System.out.println(myInner.myInnerMethod());
  }
}

// Outputs 10

Hãy tự mình thử »

How useful was this post?

Click on a star to rate it!

Average rating 0 / 5. Vote count: 0

No votes so far! Be the first to rate this post.

Leave A Reply

Your email address will not be published.