Trang chủ > Lập trình hướng đối tượng > Overloading và Overriding trong OOP

Overloading và Overriding trong OOP

Nhiều lần nhầm lẫn cái này nên tôi bèn lập ra một trang để ghi lại sự khác biệt cơ bản của hai anh này.

Overloading:

Dịch ra tiếng Việt nghĩa theo nghĩa chuyên ngành là  quá tải lên cái đã có (nghe buồn cười quá). Thật vậy, trong OOP (Object-Oriented Programming) chúng ta có thể khai báo các phương thức (hàm) có cùng tên nhưng khác nhau về kiểu của các đối số (arguments), kiểu trả về của phương thức và cả số lượng đối số của phương thức.

Một ví dụ minh họa như sau:

Giả sử chúng ta có một lớp định nghĩa phương thức Cộng:

public class Demo {
  public int Cong(int x, int y) {
    return x + y;
  }

  public string Cong(string s1, string s2) {
    return s1.Concat(s2);
  }
}

Hai phương thức Cong định nghĩa trong cùng lớp là đặc điểm khác biệt thứ hai giữa Overloading và Overriding.

Overriding:

Nếu tách hai từ này ra thì hiểu nghĩa rõ ràng hơn. Dịch sát theo tiếng Việt là che phủ lên cái đã có (nghe lạ lạ nữa). Trong OOP, các phương thức được gọi là overriding nếu chúng có cùng đối số (cả về kiểu lẫn số lượng) nhưng được định nghĩa ở các lớp khác nhau. Cụ thể: một phương thức định nghĩa ở lớp cơ sở (base class) và phương thức kia định nghĩa ở lớp dẫn xuất (derived class).

Chúng ta xem xét ví dụ sau:

class Animal{
   public void move(){
      System.out.println("Animals can move");
   }
}

class Dog extends Animal{
   public void move(){
      super.move(); // invokes the super class method
      System.out.println("Dogs can walk and run");
   }
}

public class TestDog{
   public static void main(String args[]){
      Animal b = new Dog(); // Animal reference but Dog object
      b.move();//Runs the method in Dog class
   }
}

Một số quy tắc sử dụng phương thức overriding:

  • Danh sách đối số nên giống hoàn toàn với phương thức được overriden.
  • Kiểu trả về nên giống (hoặc là kiểu con) với kiểu trả về của phương thức được overriden được mô tả trong lớp cơ sở.
  • Mức độ truy cập bị hạn chế hơn nhiều so với phương thức được overriden ở lớp cơ sở.
  • Các phương thức instance chỉ có thể overriden nếu chúng kế thừa từ lớp cơ sở.
  • Các phương thức được mô tả final (trong java) không được overriden.
  • Các phương thức được mô tả static thì không overriden nhưng được mô tả lại.
  • Các phương thức không kế thừa sẽ không được overriden (hiển nhiên)
  • Trong một lớp dẫn xuất nằm cùng gói với lớp cơ sở của các thể hiện (instance), chúng ta có thể override tất cả các phương thức của lớp cha mà không được khai báo final hoặc private.
  • Đối với các lớp dẫn xuất nằm khác gói với lớp cơ sở, chỉ có thể override các phương thức không phải final được khai báo là public hoặc protected.
  • Các hàm tạo không thể overriden.

Một số bài báo thảo luận rằng chúng ta có thể hiểu overloading là static (easy binding) polymorphism và overriding là dynamic (late binding) polymorphism.

Tóm lại:

Overloading: Methods name same but signatures is different in the class.

Overriding:To redefine the base class method in the derived class is called overriding.

static binding: compile time binding

dynamic binding: run time binding

signatures: arguments

  1. Chưa có phản hồi.
  1. No trackbacks yet.

Gửi phản hồi

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s

TechCrunch

Startup and Technology News

KTLA

Los Angeles News and Video for Southern California

GROUPE IFV - Ingénieurs France-Vietnam

La page d'information du groupe des ingénieurs france-vietnam

Journal Métro

Le site web du quotidien gratuit Métro Montréal

CHUNG ACADEMY

www.hoaichung.com

Chuyên trang DU LỊCH và DU HỌC

VinaCode

Lập trình & Cuộc sống

Khải Đơn

Vui chơi hết ngày tháng

Love & Luce

A Canadian executive businesswoman moves to Rome, for amore & luce!

Hội Anh Em Dân Chủ

Vì một nước Việt: Dân chủ - Văn minh - Pháp trị

The Art of Scientific Communication

Advice for university students in science and engineering - by Faye Hicks, PhD, PEng

MoopenCafé - Mobile Open Café

“A mind is like a parachute. It doesn't work if it is not open.” ― Frank Zappa

Economics One

A blog by John B. Taylor

BarDev - Archive

A programming blog by Mike Barlow

NHỮNG HỒI ỨC VÀ KỶ NIỆM LỊCH SỬ

Trăm năm bia đá thì mòn, Ngàn năm bia miệng vẫn còn trơ trơ

Wine Blog

by Coco Linh

Xi'an's Og

an attempt at bloggin, nothing more...

Just Go

...as long as we're together

My Journey With Data Science

'every journey begins with a single step'

%d bloggers like this: