Điều chỉnh phạm vi truy cập 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"); } }