Chương 6: Gói và thành phần chỉ định truy nhập
6.3 Chỉ định truy nhập (Accesss Specifiers)
Chỉ định truy nhập hay thành phần xác định phạm vi truy nhập trong Java điều khiển cách truy nhập và khả năng nhìn thấy của các lớp và các thành phần của lớp. Các nguyên lý hướng đối tượng được cài đặt trong chương trình thông qua sử dụng các chỉ định truy nhập. Có bốn mức truy nhập sau :
public
Chỉ định truy nhập public xác định mức truy nhập phổ biến. Chỉ định truy nhập public, khi áp dụng cho lớp Java, cho phép lớp có thể truy nhập ở mọi nơi, thậm chí bên ngoài package. Khi áp dụng cho bất kỳ thành phần nào của lớp, nó cho phép thành phần có thể truy nhập từ mọi nơi trong chương trình. Các lớp mức trên chỉ có thể là public hoặc truy nhập ngầm định và không thể là private hoặc protected.
private
Chỉ định truy nhập private xác định mức truy nhập hạn chế. Khi một lớp hoặc thành phần của nó được khai báo là private, chỉ có thể truy nhập ở bên trong lớp và không thể truy nhập ở bất kỳ đâu khác. Các lớp khác không thể truy nhập vào thành phần private của lớp này.
protected
Chỉ định truy nhập protected xác định mức truy nhập có bảo vệ. Khi thành phần lớp được khai báo là protected, thì chỉ có thể truy nhập bên
trong lớp của nó, trong cùng package và các lớp kế thừa.
Truy nhập ngầm định hoặc package.
Không có từ khóa xác định cho mức truy nhập ngầm định hoặc package. Nếu lớp hay interface không xác định các chỉ định truy nhập ở trên, thì sẽ
Chương 7 Thừa kế và giao tiếp
81/114 có mức truy nhập ngầm định. Và có thể truy nhập ở những lớp khác trong cùng package. Tương tự, nếu một thành phần của lớp không khai báo chỉ định truy nhập, thành phần đó sẽ nhận truy nhập ngầm định và chỉ có thể được truy nhập trong cùng package và không thể truy nhập từ ngoài package.
Bảng 6.1 thể hiện mối quan hệ giữa các chỉ định truy nhập và những thành phần trong một chương trình Java.
Chỉ định truy nhập
Có thể truy nhập Trường
dữ liệu Phương thức Hàm dựng Lớp Interface
public Yes Yes Yes Yes Yes
private Yes Yes Yes No No
protected Yes Yes Yes No No
mặc định/ không mô tả
Yes Yes Yes Yes Yes
Bảng 6.1 : Chỉ định truy nhập cho những thành phần khác nhau
Như vậy, như bảng 6.1, lớp và interface mức cao nhất có thể là public hoặc mặc định cách truy nhập, trường dữ liệu, hàm dựng và phương thức có thể có một trong bốn chỉ định truy nhập. Ví dụ, một hàm dựng có thể được khai báo như đoạn mã 5.
Đoạn mã 5:
public class Building { private int floors; Building( ) {
floors=10; }
}
Trong đoạn mã 5, hàm dựng không định nghĩa chỉ định truy nhập (access modifier), vì thế chỉ có truy nhập trong package của nó.
Bảng 6.2 thể hiện cách thức các chỉ định truy nhập tác động đến lớp, interface hoặc thành phần. Ví dụ, một thành phần protected của lớp có thể truy nhập bên trong lớp của nó, bên trong lớp con và bên trong những lớp trong cùng package
Chỉ định truy nhập
Những thành phần cỏ thể truy nhập
Lớp Package Lớp con Bên ngoài
Package
private Yes No No No
protected Yes Yes Yes No
Không khai báo
Yes Yes No No
Bảng 6.2 Chỉ định truy nhập và phạm vi truy nhập của chúng
Đoạn mã 6 sẽ minh họa cách sử dụng một số chỉ định truy nhập.
Đoạn mã 6:
class Building {
protected int floors = 3; private String name;
public void getName() {
System.out.println(“Building name is ”+name); }
public void setName() {
Scanner imput = new Scanner(System.in); input.useDelimiter(“\n”);
name = input.next(); }
}
public class BuildingTest {
public static void main(String args[]) { Building objBuilding = new Building();
System.out.println(“Number of floors are ”+ objBuilding.floors);
objBuilding.setName(); objBuilding.getName(); }
}
Đoạn mã 6, khi biên dịch và thực thi, sẽ hiển thị số tầng là 3 và nhắc người dùng nhập tên của tòa nhà (building) vào trường name và hiển thị tên được nhập. Như trong đoạn mã, tên được truy nhập và in ra dùng phương thức public bởi vì trường name là private và không thể truy nhập bên ngoài lớp. Quan sát ta thấy lớp BuildingTest là không được kế thừa từ lớp Building nhưng cách đơn giản
là tạo đối tượng và kích hoạt các phương thức của nó.
Một thành phần (lớp, interface hoặc thành viên) có thể có một trong các chỉ định truy nhập được mô tả trong bảng 6.2. Ví dụ, public và protected không thể được thiết lập đồng thời cho một thành phần của lớp. Khi thiết kế lớp, tốt nhất là tạo ra các biến thể hiện private và có các phương thức truy nhập (accessor methods)
Chương 7 Thừa kế và giao tiếp
83/114
public để truy xuất và thiết lập giá trị cho các biến. Và cũng đảm bảo không có
phương thức private hoặc biến private nào không được sử dụng trong lớp. Các biến cục bộ khai báo trong phương thức không khai báo chỉ định truy nhập (access specifier). Chỉ các biến mức lớp, còn gọi là biến thể hiện (instance variable), mới khai báo chỉ định truy nhập.