Trong Java, overriding (đè phương thức) và overloading (nạp phương thức) là hai khái niệm quan trọng trong lập trình hướng đối tượng. Chúng cho phép các lập trình viên thiết kế và sử dụng các phương thức linh hoạt hơn. Dưới đây là giải thích chi tiết về từng khái niệm và mục đích sử dụng của chúng.
Khái niệm: Overriding là quá trình mà một lớp con (subclass) cung cấp một cài đặt cụ thể cho một phương thức đã được định nghĩa trong lớp cha (superclass) của nó.
Đặc điểm:
@Override
để ghi chú rằng bạn đang ghi đè một phương thức.Mục đích sử dụng:
Ví dụ:
class Animal { void sound() { System.out.println("Animal makes a sound"); } } class Dog extends Animal { @Override void sound() { System.out.println("Dog barks"); } } // Sử dụng Animal myDog = new Dog(); myDog.sound(); // In ra: Dog barks
Khái niệm: Overloading là quá trình định nghĩa nhiều phương thức trong cùng một lớp với cùng một tên nhưng có các tham số khác nhau (số lượng, loại hoặc thứ tự).
Đặc điểm:
Mục đích sử dụng:
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; } } // Sử dụng MathUtil math = new MathUtil(); System.out.println(math.add(5, 10)); // In ra: 15 System.out.println(math.add(5.5, 10.5)); // In ra: 16.0 System.out.println(math.add(1, 2, 3)); // In ra: 6
Hai khái niệm này đóng vai trò quan trọng trong việc thiết kế ứng dụng theo hướng đối tượng và tối ưu hóa mã nguồn.