So sánh overload và override c năm 2024

Bên trong c#, overload và override đóng 2 vai trong khác nhau, bài viết này sẽ giải thích sự khác nhau giữa hai thành phần trên.

Overload: có tác dụng nạp chồng các hàm có thông số đầu vào khác nhau. Ví dụ public void print() sẽ có thêm hàm nạp chồng là public void print(string content). Cách khai báo hàm và tên hàm giống nhau, chỉ khác nhau về các thông số đầu vào. Ví dụ khác là các hàm dựng cũng được gọi là overload.

Trong khi đó, override cũng mang cụm từ “over” nhưng lại thực hiện chức năng khác so với overload.

Override: thường được thấy trong các lớp con khi kế thừa các chức năng (function) từ lớp cha (hoặc mẹ). Nó có chức năng ghi đè lên các hàm đã được khai báo ở lớp cha. Ví dụ: ở class Animal có hàm speak() sẽ in ra “clap clap”, ở lớp kế thừa ví dụ class Cat sẽ dùng override speak() và đã được chỉnh sửa in ra dòng “meow meow”.

Lưu ý: để hàm override dùng được nó còn phụ thuộc vào cách khai báo của lớp cha khi hàm ở lớp cha có chứa “virtual”. Nếu không có “virtual”, thì lớp con sẽ không thể ghi đè.

Khi ta khai báo phương thức getInfo trong lớp Student, có nghĩa ta đang overrding. Và đối tượng thuộc lớp Student sẽ gọi phương thức getInfo từ lớp Student thay vì lớp Person.

Cách chống Overriding

Nếu không muốn lớp con có thể Overriding lại phương thức nào đó, ta sẽ sử dụng từ khóa final

public final void getInfo() {

System.out.println("Name:"+this.name);  
System.out.println("Age:"+this.age);  
System.out.println("Height:"+this.height);  
}

Lớp con sẽ không thể Overriding được phương thức getInfo()

So sánh overload và override c năm 2024


Overloading là gì? Cách sử dụng

Overloading là nhiều phương thức trong một lớp có chung tên nhưng khác tham số truyền vào

Ví dụ: với setter cho thuộc tính age, có thể người dùng truyền vào tham số age là kiểu int, kiểu byte, short hoặc long. Như vậy, ta sẽ Overloading nhiều phương thức setter cho thuộc tính age để đảm bảo.

public class Person { public String name; private int age; public float height; public Person(String name, int age, float height) {

this.name = name;  
this.age = age;  
this.height = height;  
} public void setAge(int age) {
if (age>=0 && age<=100 ) {  
  this.age = age;  
}  
} public void setAge(byte age) {
if (age>=0 && age<=100 ) {  
  this.age = age;  
}  
} public void setAge(short age) {
if (age>=0 && age<=100 ) {  
  this.age = age;  
}  
} public void setAge(long age) {
if (age>=0 && age<=100 ) {  
  this.age = (int) age;  
}  
} public int getAge() {
return this.age;  
} public Person clone() {
Person other = new Person(this.name, this.age, this.height);  
return other;  
} public void getInfo() {
System.out.println("Name:"+this.name);  
System.out.println("Age:"+this.age);  
System.out.println("Height:"+this.height);  
} }

Giờ ta sẽ kiểm tra trong chương trình main:

public class HelloWorld { public static void main(String[] args) {

Person a = new Person("Chau", 21, 1.7f);  
byte b = 20;  
a.setAge(b);  
System.out.println(a.getAge());  
short c = 21;  
a.setAge(c);  
System.out.println(a.getAge());  
int d = 22;  
a.setAge(d);  
System.out.println(a.getAge());  
long e = 23;  
a.setAge(e);  
System.out.println(a.getAge());  
} }

Như vậy, ứng với tham số kiểu dữ liệu nào, Java sẽ gọi phương thức liên quan mà không gặp rắc rối nào:

So sánh overload và override c năm 2024


Kết

Như vậy chúng ta đã tìm hiểu overriding và overloading trong lập trình hướng đối tượng

Ở bài sau, Kteam sẽ giới thiệu đến bạn về TÍNH TRỪU TRƯỢNG TRONG LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG

Cảm ơn các bạn đã theo dõi bài viết. Hãy để lại bình luận hoặc góp ý của mình để phát triển bài viết tốt hơn. Đừng quên “Luyện tập – Thử thách – Không ngại khó”.


Tải xuống

Tài liệu

Nhằm phục vụ mục đích học tập Offline của cộng đồng, Kteam hỗ trợ tính năng lưu trữ nội dung bài học Overriding và Overloading trong Java dưới dạng file PDF trong link bên dưới.

Ngoài ra, bạn cũng có thể tìm thấy các tài liệu được đóng góp từ cộng đồng ở mục TÀI LIỆU trên thư viện Howkteam.com

Đừng quên like và share để ủng hộ Kteam và tác giả nhé!

So sánh overload và override c năm 2024


Thảo luận

Nếu bạn có bất kỳ khó khăn hay thắc mắc gì về khóa học, đừng ngần ngại đặt câu hỏi trong phần bên dưới hoặc trong mục HỎI & ĐÁP trên thư viện Howkteam.com để nhận được sự hỗ trợ từ cộng đồng.