Chào các bạn đã đến với chủ đề tiếp theo của mình. Hôm nay, mình sẽ tiếp tục giới thiệu về Phạm vi truy cập trong lập trình hướng đối tượng. Ở bài này, mình sẽ đi qua những nội dung như sau:
Nội dung
1. Phạm vi truy cập là gì? Package là gì?
Phạm vi truy cập (access modifiers) là xác định độ truy cập phạm vi vào dữ liệu của các thuộc tính, phương thức hoặc class. Để dễ hình dung, mình có ví dụ như sau:
- Trong class A có biến a, b, c, d. Những biến này trong class A có thể truy cập bất cứ khi nào
- Giả sử chúng ta tạo thêm class B. Mặc định Class B này sẽ không hiểu các biến đã khai báo trong class A và ko thể truy cập được. Vì vậy, muốn Class B truy cập được những biến này, chúng ta phải khai từ khóa public. Đây được gọi là phạm vi truy cập của biến.
Package (gói) là nhóm các class, interface hoặc các package con liên quan lại với nhau. Việc dùng package dùng để nhóm các class liên quan với nhau thành thư viện như thư viện swing, awt,…Ngoài ra, mục đích của package ngăn cản xung đột đặt tên, điều kiện truy cập, thuận tiện tìm kiếm và lưu trữ.
2. Các loại phạm vi truy cập
Có 4 loại phạm vi truy cập:
- Private
- (Default)
- Protected
- Public
Bây giờ mình sẽ tạo một package tên là MyPack và đưa class Person vào, việc này phục vụ cho những ví dụ phía dưới:
Rồi ta kéo class Person qua package MyPack
Bản chất package trong Java chính là folder chứa class liên quan với nhau để dễ quản lý.
2.1. Private
Private chỉ cho phép truy cập nội bộ của một class.
Ví dụ: ta có thuộc tính age của class Person ở dạng private, thì chỉ có thể truy cập age trong class Person. Ở MainClass, nếu ta gọi lại biến age, thì nó sẽ báo lỗi như hình bên dưới:
2.2. (Default)
Đây là phạm vi mặc định, khi bạn không ghi gì hết thì nó để phạm vị truy cập dạng này. Ở mặc định, phạm vi truy cập chỉ nằm trong nội bộ package.
Ví dụ: ta xóa tất cả phạm vị truy cập ở class Person như sau:
package MyPack;
class Person {
String name;
int age;
float height;
Person(String name, int age, float height) {
this.name = name;
this.age = age;
this.height = height;
}
void eat(String foodName) {
System.out.println(name + " is eating "+ foodName);
}
int getAge() {
return age;
}
}
Nếu ta quay lại cho class Person và MainClass chung một package thì sử dụng được:
Nhưng nếu để class Person ở 1 package khác thì sẽ báo lỗi:
2.3. Protected
Protected là phạm vi truy cập có thể từ trong và ngoài package, nhưng phải thông qua tính kế thừa. Tính kế thừa sẽ được giải thích rõ hơn trong bài bài sau.
Ví dụ: ta sửa class Person như sau:
package MyPack;
public class Person {
protected String name;
protected int age;
protected float height;
protected Person(String name, int age, float height) {
this.name = name;
this.age = age;
this.height = height;
}
protected void eat(String foodName) {
System.out.println(name + " is eating "+ foodName);
}
protected int getAge() {
return age;
}
}
Để truy cập được Person, ta sẽ cho class MainClass kế thừa class Person. Rồi sẽ tạo đối tượng HelloWorld trong main:
package MyPack;
public class MainClass extends Person {
protected MainClass(String name, int age, float height) {
//phương thức khởi tạo HelloWorld sẽ gọi phương thức Person
super(name, age, height);
}
public static void main(String[] args) {
MainClass a = new MainClass("phuong le", 21, 1.7f);
a.eat("Rice");
}
}
Ở đoạn code trên, sẽ có 2 keywords mới là extends và super. 2 keywords này sẽ được giới thiệu trong những topic kế tiếp, nên tạm thời đừng quan tâm đến nó nhé.
2.4. Public
Đây phạm vi truy cập rộng, có thể truy cập bất cứ đâu trong project Java. Tất nhiên khi khác package để cần phải khai báo import để xác định ví trí của class như phần giải thích trên.
3. Kết
Như vậy chúng ta đã tìm hiểu các loại phạm vi truy cập trong lập trình hướng đối tượng. Cảm ơn các bạn đã theo dõi bài viết của mình. Chúc các bạn thành công. Hẹn gặp lại các bạn ở những chủ đề tiếp theo.