Trong bài viết trước, chúng ta đã tìm hiểu về từ khóa "THIS". Và hôm nay, chúng ta sẽ đào sâu hơn vào một khái niệm quan trọng khác trong lập trình hướng đối tượng - "Kế thừa".
Tổng quan về kế thừa trong lập trình
Để hiểu rõ hơn về kế thừa trong lập trình hướng đối tượng, chúng ta nên có kiến thức cơ bản về các phần sau:
- Các biến trong Java.
- Các kiểu dữ liệu trong Java.
- Các hạng toán tử trong Java.
- Cấu trúc rẽ nhánh trong Java.
- Vòng lặp while trong Java.
- Vòng lặp for trong Java.
- Mảng trong Java.
- Vòng lặp for-each trong Java.
- Vai trò break và continue trong vòng lặp Java.
- Switch trong Java.
- Lập trình hướng đối tượng.
- Class trong lập trình hướng đối tượng.
- Các loại phạm vi truy cập trong lập trình hướng đối tượng.
- Từ khóa static trong lập trình hướng đối tượng.
- Từ khóa THIS trong lập trình hướng đối tượng.
Trong bài viết này, chúng ta sẽ tìm hiểu về những vấn đề sau:
- Khái niệm kế thừa.
- Khai báo và sử dụng kế thừa.
- Chú ý khi sử dụng kế thừa.
Khái niệm kế thừa
Kế thừa trong lập trình hướng đối tượng có ý nghĩa giống như việc thừa hưởng tài sản từ ba mẹ. Trong lập trình, kế thừa được hiểu là một lớp sẽ thừa hưởng lại các thuộc tính và phương thức từ một lớp khác.
Việc sử dụng kế thừa giúp ta tái sử dụng mã nguồn đã viết trước đó, đồng thời tiện lợi trong việc bảo trì và nâng cấp chương trình.
Khai báo và sử dụng kế thừa
Để khai báo kế thừa trong Java, chúng ta sử dụng cú pháp sau:
class extends { }
Ví dụ, chúng ta có hai lớp "Person" và "Student" như sau:
public class Person { public String name; public int age; public float height; public Person(String name, int age, float height) { this.name = name; this.age = age; this.height = height; } public void getInfo() { System.out.println("Name:" + this.name); System.out.println("Age:" + this.age); System.out.println("Height:" + this.height); } } public class Student extends Person { public Student(String name, int age, float height) { super(name, age, height); } }
Trong đoạn code trên, lớp "Person" và "Student" có chung thuộc tính và phương thức. Chúng ta chỉ cần giữ nguyên mã nguồn của lớp "Person" và khai báo lớp "Student" kế thừa từ lớp "Person".
Tiếp theo, chúng ta thử khởi tạo đối tượng "Student" và gọi phương thức "getInfo()":
public class HelloWorld { public static void main(String[] args) { Student a = new Student("Chau", 21, 1.7f); a.getInfo(); } }
Kết quả chương trình sẽ hiển thị thông tin từ phương thức "getInfo()" của lớp cha.
Những điều cần lưu ý khi sử dụng kế thừa
1. Slogan đặc trưng của kế thừa: "Cha có thì con có, con có chưa chắc cha đã có"
Tính chất kế thừa trong ngôn ngữ lập trình hướng đối tượng thường tương đồng nhau về tính chất. Dù bạn có thể quên đi khái niệm và cú pháp, nhưng chỉ cần hiểu câu nói trên là bạn đã hiểu về kế thừa.
Ví dụ, nếu chúng ta muốn thêm thuộc tính "universityName" cho lớp "Student" ngoài những thuộc tính và phương thức được kế thừa từ lớp "Person":
public class Student extends Person { public String universityName; public Student(String name, int age, float height, String universityName) { super(name, age, height); this.universityName = universityName; } }
Theo đúng tính chất, lớp "Student" sẽ có thuộc tính "name", "age", "height" như lớp "Person". Nhưng lớp "Person" không có thuộc tính "universityName" như lớp "Student".
2. Tận dụng từ khóa "super" để bảo trì và nâng cấp mã nguồn
Từ khóa "super" được sử dụng để truy cập các phương thức của lớp cha. Trong quá trình phát triển phần mềm, việc nâng cấp chương trình là điều không thể tránh. Việc tận dụng từ khóa "super" giúp ta tiết kiệm thời gian và công sức bằng cách sử dụng lại mã nguồn đã có và viết thêm mã mới.
Ví dụ, chúng ta thấy rằng phương thức "getInfo()" chỉ trả về thông tin "name", "age", "height". Giờ đây, chúng ta muốn cập nhật phương thức để trả về thông tin "universityName" ở lớp "Student":
public class Student extends Person { public String universityName; public Student(String name, int age, float height, String universityName) { super(name, age, height); this.universityName = universityName; } public void getInfo() { super.getInfo(); System.out.println("University Name:" + this.universityName); } }
Chúng ta có thể thử khởi tạo đối tượng để kiểm tra:
public class HelloWorld { public static void main(String[] args) { Student a = new Student("Chau", 21, 1.7f, "UTE"); a.getInfo(); } }
Kết quả của chương trình sẽ hiển thị thông tin từ cả phương thức "getInfo()" của lớp cha lẫn lớp con.
Kết
Như vậy, trong bài viết này chúng ta đã tìm hiểu về kế thừa trong lập trình hướng đối tượng. Trong bài viết tiếp theo, chúng ta sẽ khám phá về "Setter và Getter trong lập trình hướng đối tượng".
Cảm ơn các bạn đã theo dõi bài viết. Hãy để lại bình luận hoặc góp ý của bạn để chúng tôi có thể phát triển bài viết tốt hơn. Đừng quên luôn luyện tập, thử thách và không ngại khó!
Thảo luận
Nếu bạn gặp khó khăn hoặc có thắc mắc về khóa học, đừng ngần ngại để lại câu hỏi trong phần bình luận bên dưới hoặc trên mục Hỏi & Đáp tại thư viện Howkteam.com để nhận được sự hỗ trợ từ cộng đồng.