Protected Java là gì

Sử dụng các Access Modifier như public, protected, private điều chỉnh phạm vị truy cập lớp, phương thức, thuộc tính với Java. Các phương thức khởi tọa của lớp và các hàm setter, getter ứng dụng trong Java

Hãy xem từ khóa public đứng phía trước hàm main[].

public static void main[String[] args]

Từ khóa public đó gọi là access modifier - điều khiển mức độ truy cập. Các modifier có thể sử dụng cho: lớp [class], phương thức, thuộc tính.

Access modifier trong lớp

Đối với các lớp, modifier sử dụng được là public hoặc là mặc định không có khai báo modifer với ý nghĩa như sau:

  • public lớp này có thể được truy cập bởi bất kỳ lớp nào khác.
  • mặc định không viết modifier nào [để trống] thì lớp này chỉ có thể truy cập bởi các lớp có cùng package

Access modifier đối với các phương thức và thuộc tính

Modifier viết phía trước các hàm có thể là public, protected, private với các ý nghĩa như sau:

  • mặc định không viết modifier nào [để trống] thì thuộc tính / phương thức có thể truy cập bởi các lớp khác cùng package
  • public thuộc tính / phương thức truy cập bởi bất kỳ lớp nào
  • protected giống trương hợp mặc định, nhưng thêm các lớp con có thể truy cập
  • private chỉ truy cập được bởi chính lớp khai báo

Ví dụ:

public class Vehicle { private int maxSpeed; private int wheels; private String color; private double fuelCapacity; public void horn[] { System.out.println["Beep!"]; } }

Trong thực hành lập trình để đảm bảo những lợi ích từ các nguyên tắc lập trình hướng đối tượng là đóng gói thì các thuộc tính của lớp nên giữ là private, tức là chỉ truy cập được bởi lớp khai báo và sử dụng khái niệm phương thức Setter và Getter để thiết lập hay lấy giá trị thuộc tính.

Getters & Setter trong Java

Khi xây dựng cấu trúc một lớp, có các thuộc tính là private thường sẽ xây dựng thêm phương thức để lấy giá trị thuộc tính đó của lớp gọi nó là Getter và phương thức để thiết lập giá trị thuộc tính là Setter

Bạn nên theo quy tắc đặt tên các phương thức này: bắt đầu bởi set/get tiếp theo là tên thuộc tính [chữ đầu viết hoa].

Ví dụ

public class Vehicle { private String color; // Getter public String getColor[] { return this.color; } // Setter public void setColor[String c] { this.color = c; } }

Lớp ví dụ trên, thuộc tính là color, setter là setColor[] và getter là getColor[]

Từ khóa this được dùng trong các phương thức của lớp, nó sử dụng để chỉ đến đối tượng hiện tại mà lớp tạo ra. this.color là color của đối tượng hiện tại.

Sử dụng lớp Vehicle

class MyClass { public static void main[String[] args] { Vehicle v1 = new Vehicle[]; v1.setColor["Red"]; System.out.println[v1.getColor[]]; } } //Outputs "Red"

Phương thức khởi tạo

Các phương thức khởi tạo [Contructor] là phương thức đặc biệt, được gọi tự động ngay khi tạo ra đối tượng, nó dùng để khởi tạo các thuộc tính của đối tượng. Để có phương thức này, bạn chỉ cần khai báo phương thức như sau:

  • Cùng tên với tên lớp
  • Không khai báo kiểu trả về

Ví dụ

public class Vehicle { private String color; public Vehicle[] { this.color = "RED"; } public Vehicle[String c] { this.color = c; } }

Lớp trên có hai hàm tạo, một hàm có tham số và một hàm không có tham số.

public class MyClass { public static void main[String[ ] args] { Vehicle v1 = new Vehicle[]; Vehicle v2 = new Vehicle["Blue"]; } }

Đoạn mã trên v1 sẽ gọi hàm tạo thứ nhất vì không có tham số [màu sẽ gán bằng RED], v2 sẽ gọi hàm tạo thứ 2 vì có một tham số lúc này v2 sẽ có color là Blue

Access Modifier trong Java bao gồm Private, Public, ProtectedDefault. Nó đóng vai trò quan trọng trong việc giới hạn truy cập dữ liệu. Xác định phạm vi có thể truy cập bao gồm biến, phương thức, constructor hoặc lớp.

Trong một dự án Java có nhiều thành viên tham gia. Có những dữ liệu được dể là public, còn cái khác thì cần phải đặt là protected hay private để bảo vệ. Tránh việc chỉnh sửa gây lỗi trong quá trình làm việc.

Dưới đây chúng ta sẽ đi tìm hiểu về 4 giới hạn truy cập có trong ngôn ngữ lập trình Java.

1. Private

Đây là cấp độ truy cập của một công cụ sửa đổi riêng tư chỉ nằm trong lớp [Class]. Nó không thể được truy cập từ bên ngoài lớp.

Tạo file Test.java

public class Test { int number; private Test[] { number = 50; } public static void main[String[] args] { Test result = new Test[]; System.out.println[result.number]; } }

Tiếp theo mình sẽ tạo ra một file là TestNew.java

public class TestNew { public static void main[String[] args] { Test result = new Test[]; System.out.println[result.number]; } }

Khi chạy TestNew.java sẽ xuất hiện một thông báo lỗi.

2. Public

Public trong Java cho phép truy cập mọi nơi. Bên trong, bên ngoài lớp và package.

Cũng với ví dụ trên giờ thay đổi private Test[] thành public Test[] và sau đó chạy file TestNew.java.

3. Protected

Phạm vi truy cập Protected được truy cập bên trong package và bên ngoài package nhưng phải kế thừa [Extends].

Ví dụ:

Bạn sẽ tạo ra 2 package với tên là package1package2.

Trong package1 tạo file Test.java

Trong package2 tạo file TestPackage2.java

Tập tin Test.java với lệnh

package package1; public class Test { String name = "Quach Quynh"; protected Test[] { System.out.println["Xin chao ban: " + name]; } }

Và tập tin TestPackage2.java

package package2; import package1.Test; public class TestPackage2 extends Test { public static void main[String[] args] { Test obj = new TestPackage2[]; System.out.println[obj]; } }

4. Default

Default là trường hợp mặc định khi bạn không khai báo 3 modifier ở trên. Quyền truy cập Default chỉ được phép truy cập trong cùng package.

Ví dụ:

Tạo file Test.java trong package1

package package1; public class Test { protected Test[] { System.out.println["Pham vi truy cap default"]; } }

Và một file nữa là Test2.java cũng trong package1

package package1; public class Test2 { public static void main[String[] args] { Test obj = new Test[]; System.out.println[obj]; } }

Kết thúc bài học về phạm vi truy cập gồm public, private, protected, default có đơn giản không nào. Đây là một phần kiến thức không thể bỏ qua khi tìm hiểu về lập trình hướng đối tượng OOP. Chính vì vậy bạn cần đọc và làm bài tập nhiều hơn.

Category:
Tags: OOP Java

Các loại access modifier trong Java [public, protected, default, private]

Access modifier là gì?

Access Modifier là các từ dùng trước các khai báo class, biến, method để thể hiện khả năng truy cập các thể hiện của class, biến và method đó ở các class khác.

Với class ta có 2 loại access modifier là public và default nhưng với biến và phương thức thì ta có 4 access modifier [public, protected, default, private]

[Xem lại: Access modifier với class]

Khi nói đến khả năng truy cập [access] ta cần phân biệt 2 trường hợp:

  • Trường hợp 1: khi một method của một class có thể truy cập biến hoặc method của class khác.
  • Trường hợp 2: khi một class con có thể thừa kế các biến/method của class cha.

Ví dụ trường hợp 1:

public class Person { public void hello[] { System.out.println["hello"]; } } public class Student { public void demo[] { Person person = new Person[]; // method hello[] của class person là public nên ta có thể truy cập nó từ class khác person.hello[]; } }

Ví dụ trường hợp 2:

public class Person { public void hello[] { System.out.println["hello"]; } } public class Student extends Person{ public void demo[] { // method hello của class Person là public nên các class con của nó có thể kế thừa this.hello[]; Person person = new Person[]; // method hello[] của class person là public nên ta có thể truy cập nó từ class khác person.hello[]; } }

Public modifier [Các thành phần public]

Khi một phương thức hoặc biến được khai báo là public, có nghĩa là tất cả các class khác, kể cả các class không thuộc cùng package đều có thể truy cập

[giả sử các class khác có thể nhìn thấy: ví dụ class A khai báo là default, class B khác package với class A nên không thể nhìn thấy A thì tất cả các biến và phương thức của A sẽ không thể truy cập từ B]

package stackjava.com.demo.package1; public class A { public String str = "abc"; public void hello[] { System.out.println["hello"]; } } package stackjava.com.demo.package2; // không cùng package với class A import stackjava.com.demo.package1.A; public class B { public static void main[String[] args] { A a = new A[]; // biến str là public nên có thể truy cập từ class khác package System.out.println[a.str]; // phương thức hello là public nên có thể truy cập từ class khác package a.hello[]; } }

Private modifier

Khi một phương thức hoặc biến được khai báo là private nó sẽ không thể truy cập từ class khác, kể cả các class cùng source file hay các class con.

Inner class có thể truy cập được thành phần private của class chứa nó.

Ví dụ:

package stackjava.com.demo.package1; public class A { private String str = "abc"; class B { public void demo[] { A a = new A[]; System.out.println[a.str]; } } } class C { public void demo[] { A a = new A[]; System.out.println[a.str]; // compiler error } }

Default modifier

Khi một phương thức hoặc biến được khai báo là default thì chỉ có các class thuộc cùng package với nó mới có thể truy cập.

package stackjava.com.demo.package1; public class A { // default access String str = "abc"; } package stackjava.com.demo.package2; // không cùng package với class A import stackjava.com.demo.package1.A; public class B { public void demo[] { A a = new A[]; System.out.println[a.str]; // compile error } }

Protected modifier

Protected modifier khá giống với default modifier, nó hạn chế khả năng truy cập trong cùng 1 package, tuy nhiên với protected modifier thì nó còn cho phép truy cập từ các class con kể cả khi class con không nằm cùng package với class cha. [truy cập theo trường hợp thừa kế]

package stackjava.com.demo.package1; public class A { protected String str = "abc"; } package stackjava.com.demo.package2; // không cùng package với class A import stackjava.com.demo.package1.A; public class B extends A{ public void demo[] { System.out.println[this.str]; // compile success A a = new A[]; System.out.println[a.str]; // compile error } }

Access modifier với biến cục bộ [Local variable]

Không thể khai báo các biến cục bộ với access modifier. Các biến cục bộ chỉ có thể truy cập trong cùng method chứa nó.

public class A { public void demo[] { String str1; // ok public String str2; // compile error protected String str3; // compile error private String str4; // compile error } } Các loại access modifier trong Java [public, protected, default, private] stackjava.com

Xem thêm: //stackjava.com/java-core

References:

SCJP pdf

Video liên quan

Chủ Đề