Đ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");
    }
}

Đ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

Đăng ký theo dõi ủng hộ kênh