Các loại phạm vi truy cập trong lập trình hướng đối tượng | How Kteam

Dẫn nhập

Trong bài trước, Kteam có nhắc đến cho các bạn về CLASS TRONG LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG. Hôm nay hãy đi sâu về Phạm vi truy cập trong lập trình hướng đối tượng.

Nội dung

Để đọc hiểu bài này, tốt nhất những bạn nên có kiến thức và kỹ năng cơ bản về những phần sau :

Bài này chúng ta sẽ tìm hiểu những vấn đề sau:

  • Phạm vi truy cập là gì? Package là gì?
  • Các loại phạm vi truy cập

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.

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ữ.

Các loại phạm vi truy cập

Có 4 loại khoanh vùng phạm vi truy vấn :

  • Private
  • (Default)
  • Protected
  • Public

Bây giờ Kteam sẽ tạo một package tên là mypack và đưa class Person qua, việc này phục vụ cho những ví dụ phía dưới. Các bạn làm như sau trên Eclipse:

Các loại phạm vi truy cập trong lập trình hướng đối tượng

Các loại phạm vi truy cập trong lập trình hướng đối tượng

Rồi ta kéo class Person qua package mypack

Các loại phạm vi truy cập trong lập trình hướng đối tượng

Nếu các bạn sử dụng theo cách truyền thống. Thì bản chất package trong Java chính là folder chứa class mà thôi. Khi bạn xem trong source project, nó sẽ đổi như sau:

Các loại phạm vi truy cập trong lập trình hướng đối tượng

Và bạn sẽ chú ý, trong những file java nó sẽ có sửa đổi như sau :

Các loại phạm vi truy cập trong lập trình hướng đối tượng

Việc thay đổi này do IDE Eclipse tự sửa cho chúng ta:

  • Khi ta tạo một class nằm trong một package nào đó thì phải khai báo package đầu tiên: Ở đây class Person nằm trong package mypack. Ta sẽ viết  package mypack;
  • Khi ta sử dụng một class nằm ở packge khác, ta phải import qua để chương trình hiểu ta đang sử class của package nào. Theo đường dẫn class Person nằm trong package mypack, nên ở class HelloWorld ta sẽ viết import mypack.Person;

Private

Private chỉ cho phép truy cập nội bổ của một class.

Ví dụ: cho thuộc tính age của class Person ở dạng private, thì chỉ có thể truy cập age trong class Person.

Các loại phạm vi truy cập trong lập trình hướng đối tượng

(Default)

Đây là phạm vị mặc định, khi bạn không ghi gì hết thì nó để phạm vị truy vấn dạng này : Ở mặc định, khoanh vùng phạm vi truy vấn 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

class Person {
	String name;
	int age;
	float 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 HelloWorld chung một package thì sử dụng được:

Các loại phạm vi truy cập trong lập trình hướng đối tượng

Nhưng nếu để class Person ở package mypack thì sẽ báo lỗi:

Các loại phạm vi truy cập trong lập trình hướng đối tượng

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 Kteam giải thích rõ hơn trong bài TÍNH KẾ THỪA TRONG LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG. Protected chỉ có thể áp dụng bên trong class như thuộc tính, phương thức hay lớp con. Không thể áp dụng cho lớp ngoài hay interface.

Ví du: ta sửa class Person như sau:

package mypack;
public class Person {
	protected String name;
	protected int age;
	protected float height;
	
	public 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 HelloWorld kế thừa class Person. Rồi sẽ tạo đối tượng HelloWorld trong main:

import mypack.Person;

public class HelloWorld extends Person {

	protected HelloWorld(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) {
		HelloWorld a = new HelloWorld("Chau", 21, 1.7f);
		a.eat("Rice");
	}
}

Các loại phạm vi truy cập trong lập trình hướng đối tượng

Chắc chắn những bạn sẽ thấy khó hiểu ở dòng code trên. Không sao, vì đó là một khái niệm khác nên những bạn hoàn toàn có thể đọc qua và xem kĩ những bài sau .

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 trên.

Các loại phạm vi truy cập trong lập trình hướng đối tượng

Kết

Như vậy tất cả chúng ta đã tìm hiểu và khám phá những loại khoanh vùng phạm vi truy vấn trong lập trình hướng đối tượng người tiêu dùng

Ở bài sau, Kteam sẽ giới thiệu đến bạn về TỪ KHOÁ STATIC TRONG LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG

Cảm ơn các bạn đã theo dõi bài viết. Hãy để lại bình luận hoặc góp ý của mình để phát triển bài viết tốt hơn. Đừng quên “Luyện tập – Thử thách – Không ngại khó”.

Thảo luận

Nếu bạn có bất kể khó khăn vất vả hay vướng mắc gì về khóa học, đừng ngần ngại đặt câu hỏi trong phần bên dưới hoặc trong mục HỎI và ĐÁP trên thư viện Howkteam. com để nhận được sự tương hỗ từ hội đồng .