Java: Truy cập các thuộc tính và phương thức của đối tượng

Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực

Mỗi đối tượng có hai loại thành phần là các thuộc tính và các phương thức. Các thuộc tính định nghĩa các đặc điểm của một đối tượng đã tạo từ lớp và còn được gọi là các biến thể hiện. Các phương thức được sử dụng để thực thi các hành vi của các đối tượng và còn được gọi là các phương thức thể hiện.

Truy cập các thuộc tính

Cú pháp khai báo chi tiết một thuộc tính trong khi tạo lớp là như sau:

[bổ_từ_truy_cập] kiểu_dữ_liệu tên_thuộc tính;

trong đó,

bổ_từ_truy_cập: Là một từ khóa tùy chọn xác định mức độ truy cập của một biến thể hiện, nó có thể là private, protected, hoặc public. Trường hợp ta không đưa vào bổ từ truy cập thì bổ từ truy cập mặc định sẽ là package. Xem chi tiết về bổ từ truy cập tại phần Các bổ từ truy cập.

kiểu_dữ_liệu: Xác định kiểu dữ liệu của biến.

tên_thuộc_tính: Xác định tên của biến.

Các thuộc tính được khai báo theo cách tương tự với các biến cục bộ, nhưng phải nằm bên ngoài bất kỳ một định nghĩa phương thức nào.

Để truy cập vào thuộc tính của đối tượng ta sử dụng toán tử dấu chấm (.).

Ví dụ sau đây thể hiện việc tạo một đối tượng có tên cat trong phương thức main(), sau đó sử dụng toán tử (.) để truy cập vào các thành phần thuộc tính của nó.

//tạo lớp Animal:
public class Animal {
  //khai báo các thuộc tính:
  int id; //mã nhận diện
  String name; //tên
  float age; //tuổi
}

//tạo lớp TestAnimal chứa phương thức main()
class TestAnimal {
  public static void main(String[] args) {
    Animal cat = new Animal(); //tạo 1 đối tượng tên cat
    cat.id=1234; //truy cập để thiết lập (set) giá trị cho thuộc tính id
    System.out.println("ID của cat là: "+cat.id);//truy cập để lấy (get) thông tin của id
    cat.name="Moon";
    System.out.println("Name: "+cat.name);
    cat.age=1.5f;
    System.out.println("Age: "+cat.age);
  }
}

Truy cập các phương thức

Các phương thức thể hiện là các hàm được khai báo trong một lớp và được sử dụng để giải quyết các hoạt động hay hành vi trên các đối tượng.

Những quy ước sau đây cần phải được tuân theo trong khi đặt tên cho một phương thức:

- Không được là từ khóa Java.

- Không được chứa dấu cách.

- Không được bắt đầu bằng số.

- Có thể bắt đầu bằng ký tự thường, ký tự gạch dưới, hoặc ký tự '$'.

- Nên là một động từ hoặc cụm động từ thể hiện hanh vi tương ứng của đối tượng.

- Nên có tính mô tả và có ý nghĩa.

- Tên nên có nhiều từ với từ đầu tiên là một động từ viết bằng chữ thường, các từ sau là tính từ, danh từ, ... và ký tự đầu tiên của mỗi từ sau là chữ in hoa. Ví dụ như nhapLieu(), hienThiThongTin(), tinhTong(), tinhBietThucDelta().

Cú pháp chi tiết định nghĩa một phương thức thể hiện trong một lớp là như sau:

[bổ_từ_truy_cập] kiểu_trả_về tên_phương_thức ([danh_sách_tham_số]) {
  // Thân của phương thức
  //[return giá_trị;]
}

trong đó,

bổ_từ_truy_cập: Xác định mức truy cập của một phương thức thể hiện.

kiểu_trả_về: Xác định kiểu dữ liệu của giá trị mà được trả về bởi phương thức.

tên_phương_thức: Là tên phương thức.

danh_sách_tham_số: Là các giá trị truyền tới phương thức.

return giá_trị;: Nếu kiểu_trả_về là void thì không có câu lệnh này hoặc câu lệnh sẽ viết là return;, nếu kiểu_trả_về khác void thì bắt buộc phải có lệnh này, trong đó giá_trị phải có kiểu tương đương hoặc nhỏ hơn kiểu_trả_về.

Mỗi thể hiện của lớp có các biến thể hiện của chính nó, nhưng các phương thức thể hiện được chia sẻ bởi tất cả các thể hiện của lớp trong quá trình thực thi.

Một phương thức của đối tượng có thể truy cập các thuộc tính của đối tượng đó.

Để truy cập các phương thức của một đối tượng ta sử dụng toán tử (.).

Ví dụ sau thể hiện cách định nghĩa các phương thức thể hiện của lớp Animal, sau đó tạo một đối tượng cat trong phương thức main rồi dùng toán tử (.) để truy cập các phương thức của đối tượng đó.

import java.util.Scanner;

//tạo lớp Animal:
public class Animal {
  //khai báo các thuộc tính:
  int id; //mã nhận diện
  String name; //tên
  float age; //tuổi

  //định nghĩa phương inputInfo()
  //để nhập thông tin cho các thuộc tính:
  void inputInfo() {
    Scanner input = new Scanner(System.in);
    System.out.print("Mời nhập id: ");
    id = input.nextInt();
    System.out.print("Mời nhập tên: ");
    input.nextLine();
    name = input.nextLine();
    System.out.print("Mời nhập tuổi: ");
    age = input.nextFloat();
  }

  //định nghĩa phương thức showInfo()
  //để hiển thị thông tin đối tượng:
  void showInfo() {
    System.out.println("ID: " + id);
    System.out.println("Name: " + name);
    System.out.println("Age: " + age);
  }
}
//tạo lớp TestAnimal chứa phương thức main()
class TestAnimal {
  public static void main(String[] args) {
    Animal cat = new Animal(); //tạo 1 đối tượng tên cat
    cat.inputInfo();//truy cập phương thức inputInfo() để nhập thông tin cho cat
    cat.showInfo();//truy cập phương thức showInfo() để hiển thị thôn tin cho cat
  }
}

Vì các phương thức là một phần của khai báo lớp, nên chúng có thể truy cập các thành phần khác của lớp, chẳng hạn như các biến thể hiện và các phương thức khác của lớp.

Lưu ý rằng khi lớp Animal được biên dịch thì trình biên dịch sẽ đặt nó trong một tập tin có tên là KhachHang.class (tập tin bytecode). Lớp này không thể được thực thi vì không có sự hiện diện của phương thức main() trong nó.

Gọi (calling) một phương thức

Như vậy là ta có thể truy cập một phương thức của lớp bằng cách tạo một đối tượng của lớp. Để gọi một phương thức, ta sử dụng tên đối tượng, theo sau là toán tử dấu chấm (.) và sau đó là tên phương thức muốn gọi.

Trong Java, một phương thức luôn luôn được gọi từ một phương thức khác. Phương thức gọi phương thức khác thì được gọi là phương thức calling. Phương thức được gọi thì gọi là phương thức called. Sau khi thực thi tất cả các câu lệnh trong khối lệnh của phương thức called, thì quyền điều khiển sẽ được trả lại cho phương thức calling.

Phần lớn các phương thức được gọi từ phương thức main() của lớp, đó là đầu vào của việc thực thi chương trình.

Ví dụ dưới đây định nghĩa một lớp có tên PhuongTrinhBac2 gồm:

- Các thuộc tính a, b, c kiểu float thể hiện các hệ số a, b, c của phương trình bậc 2.

- Phương thức nhapCacHeSo() để nhập liệu cho các thuộc tính a, b, c.

- Phương thức tinhBietThucDelta() để tính và trả về biệt thức delta.

- Phương thức xacDinhNghiem() dùng để xác định nghiệm, trong đó có lời gọi (calling) đến phương thức (called) tinhBietThucDelta() để lấy giá trị của delta.

- Tạo một lớp có tên TestPhuongTrinhBac2 chứa phương thức main() để kiểm thử cho lớp PhuongTrinhBac2.

Chương trình được viết như sau:

File PhuongTrinhBac2.java:

import java.util.Scanner;

public class PhuongTrinhBac2 {
  float a;
  float b;
  float c;

  void nhapCacHeSo() {
    Scanner input = new Scanner(System.in);
    System.out.print("Mời nhập hệ số a: ");
    a = input.nextFloat();
    System.out.print("Mời nhập hệ số b: ");
    b = input.nextFloat();
    System.out.print("Mời nhập hệ số c: ");
    c = input.nextFloat();
  }

  double tinhBietThucDelta() {
    return b * b - 4 * a * c;
  }

  void xacDinhNghiem() {
    if (a == 0) {
      if (b == 0) {
        if (c == 0) {
          System.out.println("Phương trình có vô số nghiệm!");
        } else {
          System.out.println("Phương trình vô nghiệm!");
        }
      } else {
        System.out.println("Phương trình có 1 nghiệm, x = " + (-c / b));
      }
    } else {
      double delta = tinhBietThucDelta();//có lời gọi (calling) đến phương thức khác
      if (delta < 0) {
        System.out.println("Phương trình vô nghiệm!");
      } else if (delta == 0) {
        System.out.println("Phương trình có nghiệm kép, x1 = x2 = " + (-b / (2 * a)));
      } else {
        System.out.println("Phương trình có 2 nghiệm phân biệt:");
        System.out.println("x1 = " + ((-b + Math.sqrt(delta)) / (2 * a)));
        System.out.println("x2 = " + ((-b - Math.sqrt(delta)) / (2 * a)));
      }
    }
  }
}

class TestPhuongTrinhBac2 {
  public static void main(String[] args) {
    PhuongTrinhBac2 objPTB2 = new PhuongTrinhBac2();
    objPTB2.nhapCacHeSo();
    objPTB2.xacDinhNghiem();
  }
}

Trong chương trình trên, một đối tượng objPTB2 có kiểu lớp PhuongTrinhBac2 được tạo trong phương thức main().

» Tiếp: Hàm tạo (Constructor)
« Trước: Lớp (Class) và Đối tượng (Object)
Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực
Copied !!!