Overloading và Overriding có gì khác nhau?

Overloading và Overriding là hai khái niệm quan trọng trong lập trình hướng đối tượng, và chúng có những sự khác biệt cơ bản:

Overloading (Nạp chồng)

Khái niệm:

  • Overloading là việc định nghĩa nhiều phương thức cùng tên trong cùng một lớp, nhưng có danh sách tham số khác nhau (về số lượng hoặc kiểu dữ liệu).

Đặc điểm:

  • Phương thức nạp chồng phải có cùng tên nhưng phải có khác biệt trong danh sách tham số.
  • Kiểu trả về có thể giống hoặc khác nhau.
  • Không liên quan đến tính kế thừa.
  • Được sử dụng để cung cấp các phiên bản khác nhau của một phương thức nhằm xử lý các loại dữ liệu đầu vào khác nhau.

Ví dụ:

class MathUtil {
   int add(int a, int b) {
       return a + b;
   }
   
   double add(double a, double b) {
       return a + b;
   }
   
   int add(int a, int b, int c) {
       return a + b + c;
   }
}
 

Overriding (Ghi đè)

Khái niệm:

  • Overriding là việc định nghĩa lại một phương thức trong lớp con có cùng chữ ký (signature) với phương thức trong lớp cha.

Đặc điểm:

  • Phương thức ghi đè phải có cùng tên, cùng kiểu trả về, và cùng danh sách tham số.
  • Liên quan đến tính kế thừa: phương thức ghi đè nằm trong lớp con và phương thức bị ghi đè nằm trong lớp cha.
  • Được sử dụng để cung cấp cách triển khai cụ thể của phương thức trong lớp con.

Ví dụ:

class Animal {
   void makeSound() {
       System.out.println("Some sound");
   }
}

class Dog extends Animal {
   @Override
   void makeSound() {
       System.out.println("Bark");
   }
}
 

Tóm tắt sự khác biệt chính

Overloading:

  • Cùng tên phương thức, khác tham số.
  • Không liên quan đến kế thừa.
  • Được thực hiện trong cùng một lớp.
  • Cho phép định nghĩa nhiều phiên bản của một phương thức với tham số khác nhau.

Overriding:

  • Cùng tên phương thức, cùng tham số.
  • Liên quan đến kế thừa.
  • Thực hiện giữa lớp cha và lớp con.
  • Cho phép lớp con cung cấp triển khai cụ thể của một phương thức đã được định nghĩa trong lớp cha.
  •  

Hiểu rõ sự khác biệt này giúp lập trình viên sử dụng đúng cách các tính năng của ngôn ngữ lập trình hướng đối tượng để xây dựng hệ thống phần mềm hiệu quả và dễ bảo trì.

Bài viết liên quan

Xử lý bất đồng bộ với callback, promise, và async/await trong JavaScript

27-09-2024 Admin
32 views + likes

Bất đồng bộ là một khái niệm quan trọng trong lập trình, đặc biệt là trong các ứng dụng web và xử lý tác vụ như tải dữ liệu từ máy chủ, đọc file từ hệ thống

Cài đặt php 8.2 cho ubuntu

24-09-2024 Admin
27 views + likes

Để cài đặt PHP 8.2 trên Ubuntu, bạn có thể làm theo các bước sau:

Cải thiện công việc thông qua công cụ hỗ trợ ghi nhớ

23-09-2024 Admin
75 views + likes

Trong quá trình làm việc hàng ngày, nhiều nhân sự gặp phải khó khăn trong việc nhớ và quản lý các công việc, dễ dẫn đến bỏ sót nhiệm vụ quan trọng

8 Công cụ Marketing Online hỗ trợ bán hàng hiệu quả nhất 2024

19-08-2024 Hồ Thị Mỹ Anh
64 views + likes

Bán hàng hiệu quả, tăng doanh số là mục tiêu của bất cứ cửa hàng kinh doanh nào bởi đây là một trong những yếu tố tiên quyết giúp giảm thời gian quay vòng vốn. Vậy có những công cụ nào hỗ trợ bán hàng hiệu quả?

Biến và kiểu dữ liệu

13-08-2024 Admin
186 views + likes

Biến và kiểu dữ liệu Trong Javascript