CyStack logo
  • Sản phẩm & Dịch vụ
  • Giải pháp
  • Bảng giá
  • Công ty
  • Tài liệu
Vi

vi

Trang chủHướng dẫnOverriding và Overloading trong Java
Java

Overriding và Overloading trong Java

CyStack blog 3 phút để đọc
CyStack blog11/09/2025
Locker Avatar

Bao Tran

Web Developer

Locker logo social
Reading Time: 3 minutes

Overriding và Overloading trong Java

OverridingOverloading là những khái niệm cốt lõi trong lập trình Java. Đây là những cách để triển khai polymorphism (tính đa dạng) trong các chương trình Java của chúng ta. Tính đa dạng là một trong những khái niệm thuộc OOP.

Overriding và Overloading

Ảnh chụp màn hình Java code với các mũi tên chỉ vào những vị trí xảy ra overloading và overriding.

Khi method signature (tên và tham số) giống nhau trong superclass (siêu lớp) và child class (lớp con), thì gọi là overriding (sự ưu tiên). Khi có từ hai method trở lên trong cùng một class có cùng tên nhưng khác tham số, thì gọi là sự quá tải.

So sánh Overriding và Overloading

Overriding Overloading
Triển khai “runtime polymorphism” Triển khai “compile time polymorphism”
Lời gọi method được xác định tại runtime dựa trên loại object Lời gọi method được xác định tại compile time
Xảy ra giữa superclass và subclass Xảy ra giữa các method trong cùng một class
Có cùng signature (tên và danh sách tham số) Có cùng tên nhưng tham số khác nhau
Nếu có lỗi, tác động sẽ xuất hiện ở runtime Nếu có lỗi, có thể được phát hiện tại compile time

Ví dụ về OverridingOverloading

Đây là phần dịch và trình bày ví dụ minh họa cho Overloading và Overriding trong Java:

package com.journaldev.examples;

import java.util.Arrays;

public class Processor {

 public void process(int i, int j) {
  System.out.printf("Processing two integers:%d, %d", i, j);
 }

 public void process(int[] ints) {
  System.out.println("Adding integer array:" + Arrays.toString(ints));
 }

 public void process(Object[] objs) {
  System.out.println("Adding integer array:" + Arrays.toString(objs));
 }
}

class MathProcessor extends Processor {

 @Override
 public void process(int i, int j) {
  System.out.println("Sum of integers is " + (i + j));
 }

 @Override
 public void process(int[] ints) {
  int sum = 0;
  for (int i : ints) {
   sum += i;
  }
  System.out.println("Sum of integer array elements is " + sum);
 }

}

Overriding

Method process() với tham số int i, int j trong class Processor được ghi đè trong lớp con MathProcessor. Dòng 7 và dòng 23:

public class Processor {

    public void process(int i, int j) { /* ... */ }

}

/* ... */

class MathProcessor extends Processor {
 
    @Override
    public void process(int i, int j) {  /* ... */ }

}

Và method process() với tham số int[] ints trong class Processor cũng được ****ghi đè ****trong lớp con. Dòng 11 và dòng 28:

public class Processor {

    public void process(int[] ints) { /* ... */ }

}

/* ... */

class MathProcessor extends Processor {

    @Override
    public void process(Object[] objs) { /* ... */ }

}

Overloading

Method process() được nạp chồng trong class Processor. Các dòng 7, 11 và 15:

public class Processor {

    public void process(int i, int j) { /* ... */ }

    public void process(int[] ints) { /* ... */ }

    public void process(Object[] objs) { /* ... */ }

}

Kết luận

Trong bài viết này, chúng ta đã tìm hiểu về overriding và overloading trong Java. Overriding xảy ra khi method signature giống nhau trong siêu lớp và lớp con. Overloading xảy ra khi có từ hai method trở lên trong cùng một class có cùng tên nhưng tham số khác nhau.

0 Bình luận

Đăng nhập để thảo luận

Chuyên mục Hướng dẫn

Tổng hợp các bài viết hướng dẫn, nghiên cứu và phân tích chi tiết về kỹ thuật, các xu hướng công nghệ mới nhất dành cho lập trình viên.

Đăng ký nhận bản tin của chúng tôi

Hãy trở thành người nhận được các nội dung hữu ích của CyStack sớm nhất

Xem chính sách của chúng tôi Chính sách bảo mật.

Đăng ký nhận Newsletter

Nhận các nội dung hữu ích mới nhất