STDIO
Tìm kiếm gần đây
    • 0

    Ghi Đè Phương Thức - Overriding Method trong Java

    Trong Java, ghi đè phương thức - overriding method là phương pháp "viết lại" cách thức hoạt động của 1 phương thức của lớp dẫn xuất.
    27/05/2015
    19/09/2020
    4 phút đọc
    Ghi Đè Phương Thức - Overriding Method trong Java

    Override là gì?

    Khái niệm và đặc điểm

    Override là hiện tượng 1 phương thức thuộc lớp cha được định nghĩa lại ở lớp con.

    • Phương thức override và được override phải có chung kiểu trả về, tên phương thức và danh sách tham số.
    • Override chỉ xảy ra giữa các lớp có quan hệ kế thừa.
    • 1 phương thức ở lớp cha được override ở lớp con thì phương thức override ở lớp con không được phép thu hẹp tầm vực của phương thức đó ở lớp cha.
    • Phương thức ở lớp cha được override ở lớp con thì phương thức override ở lớp con không được phép phát sinh những ngoại lệ kiểm tra (checked exception) khác loại hoặc không có quan hệ kế thừa với các ngoại lệ được ném ra từ phương thức đó ở lớp cha.
    • Sử dụng từ khóa super để gọi phương thức được override ở lớp cha tại phương thức override ở lớp con.

    Ví dụ:

    package Overriding_Method;
    
    class CBird {
    	public void getInformation(){
    		System.out.print("has 2 legs, can fly");
    	}
    }
    public class CParrot extends CBird { // overriding getInformation() method of CBird public void getInformation(){ System.out.println("Parrot"); // using super keyword to call getInformation() of CBird super.getInformation(); } public static void main(String [] args){ CBird obj = new CParrot(); obj.getInformation(); } }

    Kết quả:

    Parrot has 2 legs, can fly
    

    Kết luận:

    Quan sát dòng CBird obj = new CParrot(), khởi tạo 1 tham chiếu kiểu CBirdobj tham chiếu tới 1 đối tượng CParrot. Khác với kỹ thuật overloading method, với overriding method, phương thức được máy ảo Java quyết định gọi tại quá trình runtime dựa trên kiểu của đối tượng mà tham chiếu đó tham chiếu tới.

    1 số lưu ý

    Trong Java, khi sử dụng override cần lưu ý 1 số trường hợp như sau:

    1 phương thức final hoặc static không thể được override, đặc biệt chú ý với phương thức static, quan sát ví dụ sau đây:

    package Overriding_Method;
    
    class CAnimal{
    	public static void doSomething(){
    		System.out.print("Animal");
    	}
    }
    
    class CElephant extends CAnimal{
    	public static void doSomething(){
    		System.out.print("Elephant");
    	}
    }
    
    public class Redefining_Method {
    	public static void main(String [] args){
    		CAnimal obj = new CElephant();
    		obj.doSomething();
    	}
    }

    Kết quả:

    Animal

    Nhận xét:

    Tại dòng CAnimal obj = new CElephant(), tạo 1 biến tham chiếu obj kiểu CAnimal tham chiếu tới 1 đối tượng kiểu CElephant và dùng obj gọi phương thức doSomething(). Theo lý thuyết về override thì kết quả phải là Elephant. Tuy nhiên kết quả là Animal. Điều đó chứng tỏ phương thức được gọi là phương thức của lớp cha, trong khi, đối tượng được tham chiếu obj tham chiếu tới là 1 đối tượng thuộc lớp con (CElephant). Như vậy, phương thức doSomething() không phải là override mà là hiện tượng redefine trong Java.

    Có thể​ nói, redefine là hiện tượng nằm giữa overload và override. Bởi lẽ, nó mang đặc điểm của cả 2 hiện tượng trên:

    • Tên hàm, kiểu trả về và danh sách tham số là giống nhau.
    • Việc lựa chọn phương thức được gọi diễn ra ở quá trình compile và dựa trên kiểu dữ liệu của tham chiếu thay vì kiểu dữ liệu của đối tượng tham chiếu đó tham chiếu tới.

    So sánh Overloading method và Overriding method

    OVERLOADING METHOD OVERRIDING METHOD
    Kiểu trả về của các phương thức overload có thể giống nhau hoặc khác nhau. Số lượng tham số hoặc kiểu dữ liệu của tham số ở các hàm overload phải khác nhau. Kiểu trả về, tên, danh sách tham số của phương thức override và phương thức được override phải giống nhau.
    Có thể mở rộng hoặc thu hẹp phạm vi của phương thức được overload. Không thể thu hẹp phạm vi của phương thức được override.
    Cho phép tạo ra những ngoại lệ hoàn toàn mới so với những ngoại lệ từ phương thức được overload. Không cho phép tạo ra những ngoại lệ khác loại hoặc không phải đối tượng thuộc lớp con của lớp có thể hiện là ngoại lệ từ phương thức được override.
    Phương thức overload được gọi do trình biên dịch quyết định dựa trên kiểu dữ liệu của biến tham chiếu tại quá trình biên dịch. Phương thức override được gọi do máy ảo Java quyết định dựa trên kiểu dữ liệu của đối tượng được tham chiếu tới tại quá trình runtime.
    Java

    Java

    Tổng hợp các bài viết Java hữu ích

    Sản phẩm

    Đề xuất

    Lập Trình Multithreading trong Ngôn Ngữ Lập Trình Java

    Lập Trình Multithreading trong Ngôn Ngữ Lập Trình Java

    Trong chương trình của chúng ta đôi khi ta cần thực thi nhiều tác vụ ...

    JavaNâng Cao

    19/11/2015

    Overloading Method - Nạp Chồng Hàm Trong Java

    Overloading Method - Nạp Chồng Hàm Trong Java

    Cơ chế hoạt động nạp chồng phương thức - method overloading trong Java.

    JavaCơ Bản

    17/08/2015

    Khám phá thêm

    Phương Thức Truyền và Nhận Dữ Liệu POST, GET Trong PHP

    Phương Thức Truyền và Nhận Dữ Liệu POST, GET Trong PHP

    Cơ chế truyền dữ liệu với phương thức POST và GET trong PHP.

    PHPCheat Sheet

    07/10/2015

    Đọc Ghi File Cơ Bản Trong C#

    Đọc Ghi File Cơ Bản Trong C#

    Hướng dẫn đọc và ghi file cơ bản sử dụng đối tượng File trong C#. Nhờ có ...

    Bùi Trung Hiếu

    07/04/2016

    Virtual Table Và Hiện Thực Hóa Polymorphism

    Virtual Table Và Hiện Thực Hóa Polymorphism

    Cơ chế vận hành của phương thức ảo, tính đa hình trong lập trình hướng ...

    Hiếu Nguyễn

    14/05/2014

    Chuyển Kiểu trong Java

    Chuyển Kiểu trong Java

    Hướng dẫn chuyển kiểu giữa các đối tượng trong Java thông qua code mẫu ...

    JavaCơ Bản

    17/08/2015

    Interface Trong C#

    Interface Trong C#

    Giới thiệu về interface trong C#, ý nghĩa sử dụng, tính ứng dụng và cách ...

    Huỳnh Minh Tân

    03/10/2017

    Trigger trong MySQL

    Trigger trong MySQL

    Giới thiệu và hiện thực trigger trong MySQL, thực hiện các phương thức ...

    Phạm Minh Trí

    31/07/2017

    Biến và Kiểu Dữ Liệu Cơ Bản trong Java

    Biến và Kiểu Dữ Liệu Cơ Bản trong Java

    Giới thiệu khái niệm, phạm vi hoạt động của biến và các kiểu dữ liệu ...

    JavaCơ Bản

    11/05/2015

    STDIO
    Trang chính
    Công ty TNHH STDIO

    30, Trịnh Đình Thảo, Hòa Thạnh, Tân Phú, Hồ Chí Minh
    +84 28.36205514 - +84 942.111912
    developer@stdio.vn

    383/1 Quang Trung, Phường 10, Quận Gò Vấp, Hồ Chí Minh
    Số giấy phép ĐKKD: 0311563559 do sở Kế hoạch và Đầu Tư TPHCM cấp ngày 23/02/2012

    ©STDIO, 2013 - 2020