Ghi đè phương thức trong Java



[Override trong Java] Nếu lớp con có cùng phương thức như đã được khai báo trong lớp cha, thì đó gọi là Ghi đè phương thức (Method Overriding) trong Java. Nói cách khác, nếu lớp con cung cấp trình triển khai cụ thể của phương thức mà đã được cung cấp bởi một trong các lớp cha của nó, thì đó là ghi đè phương thức.

Sự sử dụng của ghi đè phương thức trong Java

Ghi đè phương thức được sử dụng để cung cấp trình triển khai cụ thể của một phương thức mà đã được cung cấp bởi lớp cha của nó.

Ghi đè phương thức được sử dụng để thu được tính đa hình tại runtime.

Qui tắc cho ghi đè phương thức trong Java

  • Phương thức phải có cùng tên như trong lớp cha.

  • Phương thức phải có cùng tham số như trong lớp cha.

  • Phải là quan hệ IS-A (kế thừa).

Vấn đề xảy ra nếu không có ghi đè phương thức

Bạn theo dõi ví dụ sau để hiểu vấn đề chúng ta có thể phải đối mặt nếu chúng ta không sử dụng ghi đè phương thức.

class Vehicle{  
  void run(){System.out.println("Vehicle dang chay");}  
}  
class Bike extends Vehicle{  
    
  public static void main(String args[]){  
  Bike obj = new Bike();  
  obj.run();  
  }  
}  

Vấn đề là bạn phải cung cấp một trình triển khai cụ thể của phương thúc run() trong lớp con.

Ví dụ về ghi đè phương thức trong Java

Trong ví dụ này, chúng ta định nghĩa phương thức run trong lớp con như đã được định nghĩa trong lớp cha nhưng nó có trình triển khai cụ thể. Tên và tham số của phương thức là giống nhau và quan hệ giữa hai lớp là IS-A, vì thế đó là ghi đè phương thức.

class Vehicle{  
void run(){System.out.println("Vehicle dang chay");}  
}  
class Bike2 extends Vehicle{  
void run(){System.out.println("Bike dang chay an toan");}  
  
public static void main(String args[]){  
Bike2 obj = new Bike2();  
obj.run();  
}  
Quảng cáo

Ví dụ thực về ghi đè phương thức trong Java

Giả sử Bank là một đối tượng cung cấp lãi suất. Nhưng lãi suất lại khác nhau giữa từng ngân hàng. Ví dụ, các ngân hàng VCB, AGR và CTG có thể cung cấp các lãi suất lần lượt là 8%, 7% và 9%.

class Bank{  
int getRateOfInterest(){return 0;}  
}  
  
class VCB extends Bank{  
int getRateOfInterest(){return 8;}  
}  
  
class AGR extends Bank{  
int getRateOfInterest(){return 7;}  
}  
class CTG extends Bank{  
int getRateOfInterest(){return 9;}  
}  
  
class Test2{  
public static void main(String args[]){  
VCB s=new VCB();  
AGR i=new AGR();  
CTG a=new CTG();  
System.out.println("VCB Rate of Interest: "+s.getRateOfInterest());  
System.out.println("AGR Rate of Interest: "+i.getRateOfInterest());  
System.out.println("CTG Rate of Interest: "+a.getRateOfInterest());  
}  
}  

Câu hỏi: Chúng ta có thể ghi đè phương thức static?

Không, phương thức static không thể được ghi đè. Điều này có thể được chứng minh bởi tính đa hình tại runtime, chúng ta sẽ tìm hiểu sau.

Câu hỏi: Tại sao chúng ta không thể ghi đè phương thức static?

Bởi vì phương thức static được gắn kết với lớp trong khi đó phương thức instance được gắn kết với đối tượng. Static thuộc sở hữu Class Area và instance thuộc sở hữu Heap Area.

Câu hỏi: Chúng ta có thể ghi đè phương thức main?

Không, bởi vì main là phương thức static.

Điểm khác nhau giữa ghi đè phương thức và nạp chồng phương thức trong Java?

Có nhiều điểm khác nhau giữa nạp chồng phương thức và ghi đè phương thức trong Java. Bảng dưới đây liệt kê các điểm khác nhau này:

Quảng cáo
STT Nạp chồng phương thức Ghi đè phương thức
1 Nạp chồng phương thức được sử dụng để tăng tính có thể đọc của chương trình Ghi đè phương thức được sử dụng để cung cấp trình triển khai cụ thể của phương thức mà đã được cung cấp bởi lớp cha của nó
2 Nạp chồng phương thức được thực hiện bên trong lớp Ghi đè phương thức xuất hiện trong hai lớp mà có mối quan hệ IS-A (kế thừa)
3 Trong Nạp chồng phương thức, tham số phải khác nhau Trong Ghi đè phương thức, tham số phải là giống nhau
4 Nạp chồng phương thức là ví dụ của đa hình tại compile time Ghi đè phương thức là ví dụ của đa hình tại runtime
5 Trong Java, Nạp chồng phương thức không thể được thực hiện bởi thay đổi kiểu trả về của phương thức. Kiểu trả về có thể là giống hoặc khác trong Nạp chồng phương thức. Nhưng bạn phải thay đổi tham số Kiểu trả về phải là giống hoặc covariant trong Ghi đè phương thức

Đã có app VietJack trên điện thoại, giải bài tập SGK, SBT Soạn văn, Văn mẫu, Thi online, Bài giảng....miễn phí. Tải ngay ứng dụng trên Android và iOS.

Theo dõi chúng tôi miễn phí trên mạng xã hội facebook và youtube:

Các bạn có thể mua thêm khóa học JAVA CORE ONLINE VÀ ỨNG DỤNG cực hay, giúp các bạn vượt qua các dự án trên trường và đi thực tập doanh nghiệp với Java. Khóa học có giá chỉ 400K, nhằm ưu đãi, tạo điều kiện cho sinh viên cho thể mua khóa học.

Nội dung khóa học gồm 16 chuơng và 100 video cực hay, học trực tiếp tại https://www.udemy.com/tu-tin-di-lam-voi-kien-thuc-ve-java-core-toan-tap/ Bạn nào có nhu cầu mua, inbox trực tiếp chị Thu, trợ lý anh Tuyền để hỗ trợ thanh toán qua mã QR ngân hàng Việt Nam, fb: https://www.facebook.com/Thule.59

Anh Tuyền, tác giả khóa học, là cựu sinh viên chương trình đào tạo kĩ sư tài năng của đại học Bách Khoa Hà Nội với hơn 5 năm kinh nghiệm đi làm thực tế doanh nghiệp và cũng là Founder website vietjack.com, web giáo dục phổ biến nhất Việt Nam hiện tại (năm 2024). Java cũng là ngôn ngữ lập trình dễ đi xin việc nhất hiện tại, với mức lương cao, hãy nâng cao kiến thức IT của bản thân mình vì một Việt Nam giàu mạnh.

Loạt bài hướng dẫn của chúng tôi dựa một phần trên nguồn tài liệu của: Tutorialspoint.com




Tài liệu giáo viên