Chuyển đến nội dung chính
Mô-đun 2 · Bài học 2 trong tổng số 24/14 trong khóa học~12 min
Bài học theo mô-đun (2/2)

Phương pháp và quá tải

Các phương thức xác định hành vi của một đối tượng. Chúng ta có thể coi chúng như các hàm được khai báo bên trong một lớp hoạt động trên các trường đối tượng hoặc các tham số đến của đối tượng.

Xác định một phương pháp

Một phương thức trong Java bao gồm:

  1. Công cụ sửa đổi quyền truy cập (ví dụ: public, private).
  2. Loại trả về (ví dụ: int, String hoặc void nếu nó không trả về bất cứ thứ gì).
  3. Tên phương thức trong camelCase.
  4. Thông số được đặt trong ngoặc đơn.
  5. Nội dung phương thức được đặt trong dấu ngoặc nhọn.
Java
class Person {
    String name;

    public Person(String name) {
        this.name = name;
    }

    // Method with return type String
    public String greet() {
        return "Ciao, mi chiamo " + name;
    }
}

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

Để gọi một phương thức trên một đối tượng đã tạo, chúng ta sử dụng ký hiệu dấu chấm .:

Java
public class Main {
    public static void main(String[] args) {
        Person p = new Person("Marco");
        String message = p.greet(); // Calling the method
        System.out.println(message);
    }
}

Quá tải phương thức

Trong Java, hai hoặc nhiều phương thức trong cùng một lớp có thể có cùng tên, miễn là chúng có danh sách tham số khác nhau (về số lượng, thứ tự hoặc loại tham số). Khái niệm này được gọi là Quá tải.

Trình biên dịch quyết định phương thức nào sẽ được gọi bằng cách phân tích các đối số được truyền trong cuộc gọi.

Java
class Printer {
    // Method to print an integer
    public void printValue(int number) {
        System.out.println("Intero: " + number);
    }

    // Overloaded method to print a string
    public void printValue(String text) {
        System.out.println("Testo: " + text);
    }
}

Truyền tham số theo giá trị

Trong Java, tất cả các tham số đều được truyền theo giá trị (truyền theo giá trị). Điều này có nghĩa là khi bạn truyền một đối số cho một phương thức, Java sẽ tạo một bản sao giá trị của biến và chuyển nó vào phương thức đó.

  • Đối với loại nguyên thủy, giá trị ban đầu bên ngoài phương thức không bao giờ thay đổi, ngay cả khi được sửa đổi bên trong phương thức.
  • Đối với đối tượng/tham chiếu, tham chiếu đến đối tượng sẽ được sao chép. Điều này có nghĩa là mặc dù chúng tôi không thể thay đổi địa chỉ bộ nhớ mà đối tượng ban đầu trỏ tới, nhưng chúng tôi có thể sửa đổi trạng thái bên trong của nó (ví dụ: các trường của nó) và những thay đổi đó sẽ hiển thị bên ngoài.

Hạn chế quá tải: Kiểu trả về

Điều quan trọng cần lưu ý là bạn không thể nạp chồng một phương thức chỉ dựa trên kiểu trả về. Ví dụ: đoạn mã sau sẽ gây ra lỗi biên dịch:

Java
class Example {
    // ERROR: The signature of the two methods is considered identical
    public int getNumber() { return 42; }
    public double getNumber() { return 42.0; }
}

Trình biên dịch cần phân biệt giữa các phương thức chỉ dựa trên các tham số để quyết định phiên bản nào sẽ gọi tại thời gian biên dịch (tình trạng quá tải được giải quyết tại thời gian biên dịch).


Hãy tự mình thử

tập thể dục#java.m2.l2.e1
Nỗ lực: 0Đang tải…

Thêm phương thức public int add(int a, int b) vào lớp Máy tính để trả về tổng của hai số. Trong phương thức chính, gọi phương thức này trên đối tượng calc và gán kết quả cho một biến số nguyên.

Đang tải trình chỉnh sửa…
Hiển thị gợi ý

Khai báo phương thức là `public int add(int a, int b) { return a + b; }` và gọi nó trong phương thức chính là `int result = calc.add(5, 10);`.

Giải pháp khả dụng sau 3 lần thử

tập thể dục#java.m2.l2.e2
Nỗ lực: 0Đang tải…

Nạp chồng phương thức add trong lớp Máy tính bằng cách tạo một phương thức khác chấp nhận hai tham số kép và trả về tổng của chúng.

Đang tải trình chỉnh sửa…
Hiển thị gợi ý

Viết `public double add(double a, double b) { return a + b; }` ngay bên dưới phương thức thêm đầu tiên.

Giải pháp khả dụng sau 3 lần thử

tập thể dục#java.m2.l2.e3
Nỗ lực: 0Đang tải…

Thêm phương thức public int multiple(int a, int b) vào lớp Máy tính để trả về tích của hai số. Trong phương thức chính, gọi phương thức này trên đối tượng calc và gán kết quả cho một biến số nguyên.

Đang tải trình chỉnh sửa…
Hiển thị gợi ý

Khai báo phương thức là `public int Multiple(int a, int b) { return a * b; }` và gọi nó trong phương thức chính là `int result = calc.multiply(5, 10);`.

Giải pháp khả dụng sau 3 lần thử