Thuộc tính private
Thuộc tính private chỉ có thể được truy cập trong class chứa nó. Tức là các class khác không thể truy xuất đến các thuộc tính private. Các thuộc tính này thường được truy xuất đến thông qua các phương thức getter và setter.
Ví dụ, ta tạo 1 class như sau:
public class SomeClass { private int variable; public int getVariable() { return variable; } public void setVariable(int variable) { this.variable = variable; } }
Giờ ta sẽ thử truy xuất đến thuộc tính private int variable:
SomeClass sc = new SomeClass(); // Không được, vì thuộc tính variable là private sc.variable = 7; System.out.println(sc.variable); // được, vì truy cập variable thông qua hàm setter và getter sc.setVariable(7); System.out.println(sc.getVariable());
Thuộc tính public
Thuộc tính public có thể truy xuất thoải mái từ các class khác.
Ví dụ ta khai báo 1 class:
public class TestPublicVariable { public int variable; }
Ta thử truy xuất đến thuộc tính public int variable:
Test t = new Test(); t.variable = 5; System.out.println(t.number); //in ra 5
Thuộc tính protect
Thuộc tính protect có thể được truy xuất từ trong class chứa nó, trong package chứa class chứa nó và các class kế thừa class chứa nó. Ví dụ:
Ta tạo 1 class:
public class ParentClass { protected int value = 10; }
Trong cùng package chứa ParentClass ta tạo 1 class Test để thử truy xuất đến thuộc tính value:
public class Test { public static void main(String[] args) throws IOException { ParentClass parent = new ParentClass(); parent.value = 10; System.out.println(parent.value);//in ra 10 } }
Ta tạo 1 package khác (giả sử new_package), trong package này sẽ tạo 1 class ChildClass như sau:
public class ChildClass { public static void main(String[] args) throws IOException { ParentClass parent = new ParentClass(); //Không được vì khác package parent.value = 10; System.out.println(parent.value);//in ra 10 } }
Như vậy là 2 class khác package sẽ không truy cập được các thuộc tính protected của nhau.
Giờ ta sẽ cho ChildClass kế thừa ParentClass:
public class ChildClass extends ParentClass{ public static void main(String[] args) throws IOException { ParentClass parent = new ParentClass(); //ok parent.value = 10; System.out.println(parent.value);//in ra 10 } }
Lúc này ChildClass sẽ truy xuất được thuộc tính protected value của ParentClass.
Package Visibility
Nếu không chỉ ra modifier, thuộc tính sẽ được truy xuất bởi các class cùng package class chứa nó.
Ta tạo 1 class:
public class TestVariable { public int variable; }
Tạo tiếp 1 class cùng packge với class trên:
public class OtherClass{ public static void main(String[] args) throws IOException { TestVariable test= new TestVariable (); test.variable = 10; System.out.println(test.test); } }
Bạn hãy thử tạo 1 class ngoài package chứa TestVariable, bạn sẽ thấy nó không thể truy xuất đến thuộc tính variable của class TestVariable.