Trong ngôn ngữ lập trình java, từ khóa super đóng một vai trò quan trọng trong việc làm việc với các lớp và mối quan hệ kế thừa. Từ khóa này cho phép chúng ta truy cập đến các thành viên (biến và phương thức) của lớp cha từ lớp con. Trong bài viết này, TopDev sẽ cùng bạn tìm hiểu về cách sử dụng từ khóa super trong Java và tại sao nó lại quan trọng đối với tính kế thừa.
1. Mở đầu
Khi bạn tạo ra một lớp con từ một lớp cha, lớp con sẽ kế thừa tất cả các thuộc tính và phương thức của lớp cha. Điều này có nghĩa là bạn có thể sử dụng các thành viên này trong lớp con mà không cần phải định nghĩa lại chúng. Tuy nhiên, trong một số trường hợp, bạn có thể muốn truy cập đến các thành viên của lớp cha từ lớp con. Đây là lúc mà từ khóa super sẽ trở nên hữu ích.
2. Từ khóa super trong hàm khởi tạo
Hàm khởi tạo trong Java được sử dụng để khởi tạo một đối tượng khi nó được tạo. Trong các lớp con, từ khóa super được sử dụng bên trong hàm khởi tạo để gọi đến hàm khởi tạo của lớp cha. Điều này đảm bảo rằng các thuộc tính và hành vi của lớp cha được thiết lập trước khi lớp con thực hiện khởi tạo thêm.
Cú pháp cơ bản:
public class LớpCon extends LớpCha { public LớpCon() { super(); // Gọi đến hàm khởi tạo mặc định của LớpCha } public LớpCon(Tham số1, Tham số2) { super(Tham số1, Tham số2); // Gọi đến hàm khởi tạo cụ thể của LớpCha } }
Trong ví dụ trên, chúng ta có một lớp con LớpCon kế thừa từ lớp cha LớpCha. Trong hàm khởi tạo của lớp con, chúng ta sử dụng từ khóa super để gọi đến hàm khởi tạo của lớp cha. Nếu bạn không gọi đến hàm khởi tạo của lớp cha trong hàm khởi tạo của lớp con, hàm khởi tạo mặc định của lớp cha sẽ được gọi tự động.
2.1. Từ khóa super với hàm khởi tạo mặc định
Trong trường hợp bạn không định nghĩa bất kỳ hàm khởi tạo nào cho lớp cha, Java sẽ tự động tạo ra một hàm khởi tạo mặc định cho lớp cha. Trong trường hợp này, nếu bạn muốn gọi đến hàm khởi tạo mặc định của lớp cha từ lớp con, bạn có thể sử dụng từ khóa super như sau:
public class LớpCon extends LớpCha { public LớpCon() { super(); // Gọi đến hàm khởi tạo mặc định của LớpCha } }
2.2. Từ khóa super với hàm khởi tạo cụ thể
Nếu bạn định nghĩa một hoặc nhiều hàm khởi tạo cho lớp cha, bạn phải gọi đến một trong các hàm khởi tạo này từ lớp con sử dụng từ khóa super. Ví dụ:
public class LớpCon extends LớpCha { public LớpCon() { super(); // Gọi đến hàm khởi tạo mặc định của LớpCha } public LớpCon(String thamSo) { super(thamSo); // Gọi đến hàm khởi tạo cụ thể của LớpCha với tham số là thamSo } }
Trong ví dụ trên, bạn có hai hàm khởi tạo cho lớp cha LớpCha. Trong hàm khởi tạo thứ hai, chúng ta sử dụng từ khóa super để gọi đến hàm khởi tạo cụ thể của lớp cha với tham số là thamSo.
Xem ngay các tin tuyển dụng Java đãi ngộ tốt
3. Truy cập tới các biến của lớp cha
Từ khóa super cũng có thể được sử dụng để truy cập trực tiếp đến các biến của lớp cha từ lớp con. Điều này hữu ích khi bạn cần sử dụng một biến cụ thể được khai báo trong lớp cha nhưng không muốn ghi đè lên nó trong lớp con.
Cú pháp:
public class LớpCon extends LớpCha { ... public void phươngThức() { System.out.println("Giá trị của biến lớp cha: " + super.tênBiến); } }
Trong ví dụ trên, chúng ta có một phương thức phươngThức trong lớp con LớpCon. Trong phương thức này, chúng ta sử dụng từ khóa super để truy cập đến biến tênBiến của lớp cha.
>>> Xem thêm: Sử dụng List để quản lý dữ liệu trong Java
4. Từ khóa super trong phương thức ghi đè (Overriding)
Phương thức Overriding là một tính năng quan trọng của tính kế thừa trong Java. Nó cho phép bạn định nghĩa lại một phương thức đã được định nghĩa trong lớp cha trong lớp con. Khi đó, phương thức trong lớp con sẽ được thực thi thay vì phương thức trong lớp cha.
Tuy nhiên, trong một số trường hợp, bạn có thể muốn gọi đến phương thức của lớp cha từ lớp con khi ghi đè phương thức này. Đây là lúc mà từ khóa super sẽ trở nên hữu ích.
Ví dụ:
public class LớpCha { public void phươngThức() { System.out.println("Đây là phương thức của lớp cha"); } } public class LớpCon extends LớpCha { @Override public void phươngThức() { super.phươngThức(); // Gọi đến phương thức của lớp cha System.out.println("Đây là phương thức của lớp con"); } }
Trong ví dụ trên, chúng ta có hai lớp LớpCha và LớpCon. Lớp LớpCon kế thừa từ lớp LớpCha và ghi đè phương thức phươngThức. Trong phương thức ghi đè này, chúng ta sử dụng từ khóa super để gọi đến phương thức của lớp cha trước khi thực hiện các hành động khác.
>>> Xem thêm: Sử dụng override trong Java sao cho hiệu quả?
4.1. Từ khóa super với phương thức không được ghi đè
Nếu bạn muốn gọi đến một phương thức của lớp cha trong lớp con mà không cần ghi đè phương thức đó, bạn có thể sử dụng từ khóa super như sau:
public class LớpCha { public void phươngThức() { System.out.println("Đây là phương thức của lớp cha"); } } public class LớpCon extends LớpCha { public void phươngThứcKhác() { super.phươngThức(); // Gọi đến phương thức của lớp cha System.out.println("Đây là phương thức khác của lớp con"); } }
Trong ví dụ trên, chúng ta có một phương thức phươngThức trong lớp cha và một phương thức phươngThứcKhác trong lớp con. Trong phương thức phươngThứcKhác, chúng ta sử dụng từ khóa super để gọi đến phương thức của lớp cha trước khi thực hiện các hành động khác.
5. Kết luận
Như vậy, chúng ta đã tìm hiểu về cách sử dụng từ khóa super trong Java và tại sao nó lại quan trọng đối với tính kế thừa. Từ khóa super cho phép chúng ta truy cập đến các thành viên của lớp cha từ lớp con và cũng có thể được sử dụng để gọi đến các hàm khởi tạo và phương thức của lớp cha. Việc hiểu rõ về từ khóa super sẽ giúp bạn làm việc hiệu quả với tính kế thừa trong Java.
Đừng quên tiếp tục truy cập Blog TopDev để cập nhật những thông tin hữu ích về lập trình bạn nhé!.
Bài viết chỉ mang tính chất tham khảo
Nội dung được tổng hợp bởi AI và điều chỉnh bởi Ban Biên tập TopDev
Cập nhật tin tuyển dụng IT lương cao tại TopDev