Tính đa hình trong Java: Cách ghi đè hoặc ghi đè các phương thức

Tính đa hình trong Java: Cách ghi đè hoặc ghi đè các phương thức

Nạp chồng và ghi đè phương thức là hai cách mà Java thể hiện tính đa hình. Đa hình xuất phát từ sự kết hợp của hai từ Hy Lạp: 'poly' có nghĩa là nhiều và 'morph' có nghĩa là hình thức. Do đó, tính đa hình cho phép các phương thức có nhiều dạng.





Làm theo hướng dẫn này để tìm hiểu cách nạp chồng hoặc ghi đè các phương thức trong Java.





Quá tải phương thức là gì?

'Nạp chồng phương thức' đề cập đến việc xác định các phương thức khác nhau trong một lớp có cùng tên. Các phương pháp phải có các chữ ký khác nhau. Chữ ký phương thức là sự kết hợp của tên phương thức và danh sách tham số. Nó không bao gồm loại trả lại.





Trình biên dịch biết phương pháp nào cần sử dụng bằng cách kiểm tra kiểu, số lượng tham số và thứ tự đặt chúng.

Có liên quan: Khám phá sự kế thừa trong ngôn ngữ lập trình Java



Quá tải phương thức thể hiện tính đa hình thời gian biên dịch. Tính đa hình thời gian biên dịch có nghĩa là trình biên dịch Java liên kết một đối tượng với chức năng của nó trong thời gian chạy. Trình biên dịch kiểm tra các chữ ký của phương thức để đạt được điều này.

Loại đa hình này còn được gọi là liên kết tĩnh hoặc liên kết sớm.





Xem ví dụ nạp chồng phương thức bên dưới:

class Arithmetic{
int cube(int x){
return x*x*x;
}
double cube(double x){
return x*x*x;
}
float cube(float x){
return x*x*x;
}
public static void main(String[] args){
Arithmetic myMultiplication = new Arithmetic();
System.out.println('The cube of 5 is ' + myMultiplication.cube(5));
System.out.println('The cube of 5.0 is ' + myMultiplication.cube(5.0));
System.out.println('The cube of 0.5 is ' + myMultiplication.cube(0.5));
}
}

Đầu ra:





The cube of 5 is 125
The cube of 5.0 is 125.0
The cube of 0.5 is 0.125

Đoạn mã trên cho thấy cách bạn có thể lấy một khối lập phương có nhiều loại khác nhau ( NS , kép , trôi nổi ) bằng cách sử dụng cùng một phương pháp.

Nói chung, nạp chồng phương thức được sử dụng để xác định các phương thức tương tự với các kiểu tham số khác nhau.

Ghi đè phương thức là gì?

Điều này đề cập đến một cách triển khai khác của một phương thức trong một lớp con. Phương thức phải đã được định nghĩa trong lớp cha.

Phương thức ghi đè (tức là một phương thức trong lớp con) phải có cùng một chữ ký phương thức như trong lớp cha. Kiểu trả về của phương thức ghi đè có thể giống hoặc là kiểu con của phương thức trong lớp cha.

Ghi đè thường được sử dụng để bao gồm một triển khai cụ thể của hành vi của một đối tượng trong lớp con.

class Account{
public void message() {
System.out.println('
Thank you for opening an account with us!');
}
public static void main(String args[]) {
Account myAccount = new Account();
Savings mySavings = new Savings();
FixedDeposit myFixedDepo = new FixedDeposit();
myAccount.message();
mySavings.message();
myFixedDepo.message();
}
}
class Savings extends Account {
public void message() {
System.out.println('
Thank you for opening a Savings account with us!');
}
}
class FixedDeposit extends Account {
public void message() {
System.out.println('
Thank you for opening a Fixed Deposit account with us!');
}
}

Đầu ra:

Thank you for opening an account with us!
Thank you for opening a Savings account with us!
Thank you for opening a Fixed Deposit account with us!

Ví dụ trên cho thấy phương pháp thông điệp() được ghi đè trong các lớp con Tiết kiệmFixedDeposit . Các thông báo khác nhau sẽ được hiển thị cho chủ tài khoản ngân hàng có tài khoản Tiết kiệm và những người có tài khoản Tiền gửi cố định.

Có liên quan: Những điều bạn cần biết về cách sử dụng chuỗi trong Java

Cũng cần lưu ý rằng việc ghi đè phương thức thể hiện tính đa hình thời gian chạy hoặc điều phối phương thức động. Điều này có nghĩa là phương thức được gọi được giải quyết trong thời gian chạy thay vì biên dịch.

Để tránh một phương thức bị ghi đè, hãy sử dụng từ khóa cuối cùng .

final void message (){
System.out.println('
Thank you for opening an account with us!');
}

Khi một lớp con cố gắng ghi đè nó, một lỗi biên dịch sẽ xảy ra.

Lý tưởng nhất là tất cả các phương thức được gọi trong một hàm tạo phải là cuối cùng . Điều này là để tránh mọi thay đổi ngoài ý muốn có thể do các lớp con gây ra.

Đôi khi, bạn có thể cần truy cập một phương thức được ghi đè trong phương thức ghi đè. Bạn có thể sử dụng từ khóa siêu theo sau là toán tử dấu chấm ( . ) và tên phương thức trong trường hợp này.

Xem xét lớp cha Thú vật .

class Animal{
public void move() {
System.out.println('
I can move.');
}
}

Dưới đây là một lớp con, được gọi là , điều đó ghi đè di chuyển() :

class Fish extends Animal {
public void move() {
System.out.println('
I can swim.');
super.move();
}
public static void main(String args[]){
Fish Tilapia = new Fish();
Tilapia.move();
}
}

Đầu ra:

tùy chọn khởi động kép không hiển thị trong Windows 10
I can swim.
I can move.

Khi ghi đè một phương thức, bạn cũng cần lưu ý đến công cụ sửa đổi truy cập được sử dụng. Công cụ sửa đổi trong lớp con phải có cùng mức độ hiển thị hoặc cao hơn trong lớp cơ sở. Ví dụ: nếu phương thức trong lớp cơ sở được định nghĩa là được bảo vệ , thì phương pháp ghi đè có thể là được bảo vệ hoặc công cộng .

Mã đơn giản với đa hình

Ghi đè và nạp chồng phương thức rất quan trọng đối với việc đơn giản hóa mã và mã đơn giản là một phương pháp hay.

Tại sao? Hãy tưởng tượng một cơ sở mã phức tạp với nhiều thông tin chi tiết hơn là Ga Trung tâm Grand. Bây giờ hãy tưởng tượng một con bọ tàn phá bắt đầu phá hủy công việc khó khăn của bạn ngay trước mắt bạn. Bạn cần phải cách ly nguồn lây nhiễm, và bạn cần thực hiện nhanh chóng.

Chúc may mắn, bạn đã không đơn giản hóa mã của mình ... Bây giờ bạn sắp có được một bài học thực sự về mật mã. Sử dụng cấu trúc dữ liệu hiệu quả và làm những gì bạn có thể để rút ngắn mã (chẳng hạn như ghi nhớ DRY) là cách bảo vệ tốt nhất của bạn trước tình huống như thế này.

Tiếp theo trong danh sách học Java của bạn sẽ làm việc với các mảng. Chúng là cấu trúc dữ liệu quan trọng được sử dụng để lưu trữ hàng loạt điểm dữ liệu.

Đăng lại Đăng lại tiếng riu ríu E-mail Cách tạo và thực hiện các thao tác trên mảng trong Java

Học Java? Hãy để các mảng xử lý dữ liệu của bạn một cách dễ dàng.

Đọc tiếp
Chủ đề liên quan
  • Lập trình
  • Java
  • Hướng dẫn viết mã
Giới thiệu về tác giả Jerome Davidson(22 bài báo đã xuất bản)

Jerome là Nhân viên viết bài tại MakeUseOf. Anh ấy bao gồm các bài báo về Lập trình và Linux. Anh ấy cũng là một người đam mê tiền điện tử và luôn theo dõi ngành công nghiệp tiền điện tử.

Xem thêm từ Jerome Davidson

Theo dõi bản tin của chúng tôi

Tham gia bản tin của chúng tôi để biết các mẹo công nghệ, đánh giá, sách điện tử miễn phí và các ưu đãi độc quyền!

Bấm vào đây để đăng ký