Hướng dẫn Java

TRANG CHỦ Java Giới thiệu Java Java Bắt đầu Cú pháp Java Nhận xét Java Các biến Java Các kiểu dữ liệu Java Truyền kiểu Java Toán tử Java Chuỗi Java Toán Java Java Booleans Java Nếu ... Khác Chuyển đổi Java Java While Loop Java cho vòng lặp Ngắt / Tiếp tục Java Mảng Java

Phương thức Java

Phương thức Java Các tham số phương pháp Java Nạp chồng phương pháp Java Phạm vi Java Đệ quy Java

Các lớp Java

Java OOP Các lớp / đối tượng Java Thuộc tính lớp Java Phương thức lớp Java Trình tạo Java Các công cụ sửa đổi Java Đóng gói Java Gói / API Java Kế thừa Java Đa hình Java Các lớp bên trong Java Tóm tắt Java Giao diện Java Java Enums Đầu vào của người dùng Java Ngày Java Java ArrayList Java LinkedList Java HashMap Java HashSet Trình lặp lại Java Các lớp Java Wrapper Các trường hợp ngoại lệ của Java Java RegEx Chủ đề Java Java Lambda

Xử lý tệp Java

Tệp Java Java Tạo / Viết tệp Java đọc tệp Java Xóa tệp

Java Cách thực hiện

Thêm hai số

Tham khảo Java

Từ khóa Java Phương thức chuỗi Java Phương pháp toán học Java

Ví dụ về Java

Ví dụ về Java Trình biên dịch Java Bài tập Java Java Quiz Chứng chỉ Java


Các lớp bên trong Java


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)


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();
              ^



Lớp bên trong tĩnh

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

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