- Tham gia
- 18/09/2016
- Bài viết
- 3,165
Trong bài này mình sẽ giới thiệu tiếp về đặc tính thứ hai của OOP, đó là encapsulation (tính đóng gói) hay còn gọi là information hiding (che giấu thông tin)
Có 4 loại access modifier:
- Private
- (Mặc định)
- Protected
- Public
private, protected, public đồng thời cũng là các từ khóa trong Java, khi bạn không sử dụng thì access modifier là mặc định
Các từ khóa trên đặt trước tên của Constructor, từ khóa class, kiểu dữ liệu, hoặc đặt trước static (nếu có)
Ví dụ:
Trong ảnh trên, biến tenTaiLieu được thêm từ khóa private
Hàm #datTen() được thêm từ khóa protected
Ở trên cùng, class TaiLieu được thêm từ khóa public
Khả năng truy cập của các access modifier:
Chú ý:
Java sẽ truy cập từ ngoài -> trong. Gỉa sử cái Method là public nhưng class là private thì Method đó vẫn không thể truy cập từ bên ngoài được!
Nếu không thể truy cập Constructor thì không thể tạo Object
Ví dụ:
Cái ảnh thứ hai mình đã nói ở trên rồi nhé! (Gỉa sử class TaiLieu được cung cấp sẵn, không thay đổi)
Trong ảnh 1, class HocSinh đã kế thừa class TaiLieu
Mình muốn làm một hàm để cho học sinh này xem tài liệu, nên mình tạo ra #xemTaiLieu()
Bây giờ, mình phải đặt tên cho cái tài liệu đó. Nhưng biến tenTaiLieu đã có access modifier là private nên mình không thể truy cập được!
Thế nên mình dùng hàm kia có access modifier là protected để truy cập (Lý do: cả hai class trên đã cùng một Package)
Nhìn vào mũi tên màu xanh từ ảnh 1 -> 2: Mình gọi #datTenTaiLieu() kế thừa từ TaiLieu, hàm này sẽ thay đổi giúp mình giá trị biến tenTaiLieu mà không cần truy cập biến đó trực tiếp
Đây là một ví dụ thôi nhé
Đừng kêu t đặt vấn đề rườm rà
Ví dụ trên còn chuẩn bị cho 1 thứ là getter & setter mà mình sẽ nói sau!
Có 4 loại access modifier:
- Private
- (Mặc định)
- Protected
- Public
private, protected, public đồng thời cũng là các từ khóa trong Java, khi bạn không sử dụng thì access modifier là mặc định
Các từ khóa trên đặt trước tên của Constructor, từ khóa class, kiểu dữ liệu, hoặc đặt trước static (nếu có)
Ví dụ:
Trong ảnh trên, biến tenTaiLieu được thêm từ khóa private
Hàm #datTen() được thêm từ khóa protected
Ở trên cùng, class TaiLieu được thêm từ khóa public
Khả năng truy cập của các access modifier:
Private | Mặc định | Protected | Public |
Chỉ cho phép truy cập trong nội bộ Class | Cho phép truy cập từ Class cùng Package | Cho phép truy cập từ Class cùng Package hoặc Class kế thừa | Cho phép truy cập từ mọi Class |
Chú ý:
Java sẽ truy cập từ ngoài -> trong. Gỉa sử cái Method là public nhưng class là private thì Method đó vẫn không thể truy cập từ bên ngoài được!
Nếu không thể truy cập Constructor thì không thể tạo Object
Ví dụ:
Cái ảnh thứ hai mình đã nói ở trên rồi nhé! (Gỉa sử class TaiLieu được cung cấp sẵn, không thay đổi)
Trong ảnh 1, class HocSinh đã kế thừa class TaiLieu
Mình muốn làm một hàm để cho học sinh này xem tài liệu, nên mình tạo ra #xemTaiLieu()
Bây giờ, mình phải đặt tên cho cái tài liệu đó. Nhưng biến tenTaiLieu đã có access modifier là private nên mình không thể truy cập được!
Thế nên mình dùng hàm kia có access modifier là protected để truy cập (Lý do: cả hai class trên đã cùng một Package)
Nhìn vào mũi tên màu xanh từ ảnh 1 -> 2: Mình gọi #datTenTaiLieu() kế thừa từ TaiLieu, hàm này sẽ thay đổi giúp mình giá trị biến tenTaiLieu mà không cần truy cập biến đó trực tiếp
Đây là một ví dụ thôi nhé
Đừng kêu t đặt vấn đề rườm ràVí dụ trên còn chuẩn bị cho 1 thứ là getter & setter mà mình sẽ nói sau!



