Trang chủ » Blog » Override Và Overload Trong Java Là Gì?

Override Và Overload Trong Java Là Gì?

bởi Admin | 15:18 | Blog

Override (ghi đè phương thức) và Overload (Nạp chồng phương thức) là hai khái niệm cơ bản trong Java mà bất kì người nào khi mới bắt đầu với lập trình cũng cần phân biệt. Vậy chúng là gì và khác nhau thế nào? Hãy cùng CodeGym Hà Nội phân tích và tìm hiểu trong bài viết này nhé!

> Đọc thêm: Khóa học lập trình Java

Override (ghi đè phương thức) là gì?

ghi-de-phuong-thuc

Ghi đè phương thức

Override là một tính năng cho phép một lớp con cung cấp một triển khai cụ thể của phương thức đã được cung cấp bởi một trong các lớp cha của nó. Nói một cách khác, ghi đè phương thức là nếu lớp con có một hoặc nhiều phương thức giống với một trong các lớp cha của nó.

Để thu được tính đa hình tại runtime, ta dùng ghi đè phương thức (override).

Các quy định về ghi đè trong Java

  • Danh sách tham số phải trùng nhau, kiểu giá trị trả về phải tương thích.
  • Phương thức đè không được giảm quyền truy nhập so với phiên bản của lớp cha.
    • Nói cách khác, quyền truy nhập mà phiên bản của lớp con cho phép phải bằng hoặc rộng hơn phiên bản của lớp cha. Ta không thể cài đè một phương thức public bằng một phiên bản private. Nếu không, tình huống xảy ra là một lời gọi phương thức đã được trình biên dịch chấp nhận vì tưởng là phương thức public nhưng đến khi nó chạy lại bị máy ảo từ chối vì phiên bản được gọi lại là private.
  • Phải là quan hệ IS-A (kế thừa).
  • Các phương thức final, static, private không thể cài đè.

Ví dụ thực tế về override (ghi đè phương thức) trong Java

class Person {
    public void seeCockroaches() {
    }
}
class Women extends Person {
    @Override
    public void seeCockroaches() {
        System.out.println("Woman see cockroaches: Screaming and run away");
    }
}
class Man extends Person {
    @Override
    public void seeCockroaches() {
        System.out.println("Man see cockroaches: Beat the cockroaches");
    }
}
class Test {
    public static void main(String[] args) {
        Person man = new Man();
        Person women = new Women();
        man.seeCockroaches();
        women.seeCockroaches();
    }
}

Kết quả sau khi chạy chương trình trên là:

Man see cockroaches: Beat the cockroaches

Woman see cockroaches: Scream and run away

Overload (nạp chồng phương thức) là gì?

nap-chong-phuong-thuc

Nạp chồng phương thức

Nạp chồng phương thức là có vài phương thức trùng tên nhưng khác nhau về đối số trong cùng 1 lớp. Nạp chồng phương thức cho phép ta tạo nhiều phiên bản của một phương thức, mỗi phiên bản chấp nhận một danh sách đối số khác nhau, nhằm tạo thuận lợi cho việc gọi phương thức.

Để thu được tinh đa hình tại compile time, ta dùng nạp chồng phương thức (overload).

Các quy tắc nạp chồng

  • Các phương thức overloaded phải cùng tên nhưng khác nhau ở các tham số.
  • Chúng có thể được định nghĩa cùng hoặc khác kiểu dữ liệu trả về.
  • Chúng có thể được định nghĩa cùng hoặc khác access modifier.
  • Các phương thức chỉ khác nhau ở kiểu dữ liệu trả về hoặc access modifier thì không được gọi là overloaded .

Ví dụ thực tế về overload (nạp chồng phương thức) trong Java

public class Bird {
    public String fly(String scream) {
        return "Birds fly away";
    }
    public String fly(String scream, String location) {
        return "Birds fly away";
    }
    public void fly(String cream, String location, int distance) {
        System.out.println("Birds fly away");
    }
    public static void main(String[] args) {
        Bird bird = new Bird();
        System.out.println(bird.fly("AAA"));
        System.out.println(bird.fly("AAA", "riverside"));
        bird.fly("AAA", "riverside", 2);
    }
}

Kết quả sau khi chạy chương trình trên là:

Birds fly away
Birds fly away
Birds fly away

 

Phân biệt giữa overload và override

phan-biet-override-overload

Phân biệt override và overload

OverrideOverload
Hành viThay đổi hành vi hiện tại của phương thức.Thêm hoặc mở rộng cho hành vi của phương thức.
Đa hìnhThể hiện tính đa hình tại run time.Thể hiện tính đa hình tại compile time.
Danh sách tham sốDanh sách tham số phải giống nhau.Danh sách tham số có thể khác nhau.
Quyền truy cậpPhương thức ghi đè ở lớp con phải có quyền truy cập bằng hoặc lớn hơn phương thức được ghi đè ở lớp cha.Phương thức nạp chồng có thể có quyền truy cập khác nhau.
Giá trị trả vềGiá trị trả về bắt buộc phải có kiểu giống nhau.Giá trị trả về có thể có kiểu khác nhau.
Phạm viXảy ra giữa 2 lớp có quan hệ kế thừaXảy ra trong phạm vi cùng 1 lớp.

Tổng kết

Bài viết trên đây đã giới thiệu về Override, Overload và sự khác biệt giữa chúng, hi vọng sẽ giúp ích ít nhiều cho các bạn đọc bài viết này. Hãy đón đọc những bài viết và tìm hiểu thêm về các ngôn ngữ lập trình khác qua các khóa học lập trình tại CodeGym Hà Nội bạn nhé!

Tags:

0 Lời bình

Gửi Lời bình

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

BÀI VIẾT LIÊN QUAN

BẠN MUỐN HỌC LẬP TRÌNH?

GỌI NGAY

098 953 44 58

Đăng ký tư vấn lộ trình học lập trình

Đăng ký tư vấn, định hướng lộ trình học và giải đáp các thắc mắc về ngành nghề – Miễn phí – Online.

5 + 10 =

TƯ VẤN VỀ LỘ TRÌNH HỌC NGHỀ LẬP TRÌNH TẠI CODEGYM
TƯ VẤN VỀ LỘ TRÌNH HỌC NGHỀ LẬP TRÌNH TẠI CODEGYM