Phần 4 : Tính kế thừa trong lập trình hướng đối tượng

Qua 3 bài giới thiệu về hướng đối tượng , tầm vực của thuộc tính và phương thức trong hướng đối tượng, các phương thức magic trong hướng đối tượng chúng ta đã học được kha khá kiến thức rồi, trước khi vào bài mới này, bạn cũng nên dành chút thời gian ôn lại bài cũ, đó là một cách học cuốn chiếu để cho bạn nhớ bài lâu hơn. Hôm nay mình sẽ hướng dẫn các bạn về tính kế thừa trong lập trình hướng đối tượng, đây gần như được coi là một trong những đặc điểm quan trọng, không thể thiếu của hướng đối tượng, thiếu tính kế thừa, hướng đối tượng sẽ không còn là hướng đối tượng mà nó sẽ trở thành một cái loài gì đó, mình cũng ko biết nữa 🙂

1) Kế thừa là gì ?

Một ví dụ đơn giản về tính kế thừa đó là trong gia đình, bạn được sinh ra chính là sự kế thừa các gen duy truyền của ba mẹ bạn chẳng hạn như màu tóc, màu mắt, chiều cao, nhóm máu,…Trong lập trình hướng đối tượng cũng thế, giả sử bạn có 1 class cha có các thuộc tính và phương thức nào đó, thì các class khác khi kế thừa class cha này (class con), thì nó sẽ thừa hưởng và tái sử dụng các phương thức, thuộc tính của class cha. Ví dụ dưới đây cho chúng ta thấy rõ hơn về sự kế thừa

Save đoạn code trên và thực thi, chúng ta sẽ thấy xuất ra ngoài trình duyệt

Phân tích đoạn code trên ta thấy (hè, giống tập làm văn quá :3), lớp ChildClass muốn kế thừa lớp ParentClass, nó sẽ sử dụng từ khóa extends, khi kế thừa, lớp này sẽ thừa hưởng được các đặc tính của lớp cha, như là màu mắt, màu da, chiều cao. chính vì thế khi khởi tạo đối tượng $childClass, chúng ta có thể truy xuất được ngay đến thuộc tính $eye_color thông quá $childClass->eye_color.

2) Override trong hướng đối tượng

Overide hay còn gọi là nạp chồng, đây là kĩ thuật ghi đè thuộc tính của lớp cha bởi lớp con. Trở lại ví dụ ở mục 1), các bạn có để ý thấy khi chạy đoạn code trên, chỉ xuất ra 2 dòng đó là :

Vậy thì dòng Tôi chính là class ParentClass! chạy đâu mất tiêu rồi ? Đó là bởi vì trong class con là ChildClass kế thừa từ lớp cha là ParentClass, nó vô tình cũng có phương thức __contruct, và cũng vô tình nó đã ghi đè lên phương thức __contruct của lớp cha, chính vì thế khi thực thi, ngoài trình duyệt chỉ hiện ra dòng chữ “Tôi là lớp ChildClass, tôi kế thừa từ cha tôi đó là class ParentClass”. Từ ví dụ trên, ta rút ra kết luận, để thay đổi thuộc tính hay phương thức của lớp cha, thì trong lớp con bạn chỉ cần khởi tạo lại chính đặc tính của lớp cha (đặt trùng tên phương thức, thuộc tính) là bạn sẽ ghi đề được lớp cha. Thêm 1 ví dụ nữa sau đây để bạn dễ hình dung hơn về tính override

Kết quả

3) Bảo vệ lớp cha khỏi bị ghi đè

Trong trường hợp lớp con ChildClass muốn kế thừa lớp cha, nhưng vẫn muốn giữ lại đặc tính của lớp cha
thì ta phải làm như thế nào, đơn giản chúng ta chỉ cần làm theo cú pháp

từ khóa parent + toán từ phân giải phạm vi (::)

Ví dụ

Thực thi đoạn code trên sẽ xuất ra như sau:

Hôm nay viết tới đây là đủ rồi, phew phew, hơi mệt nhưng vui, nếu bạn đã có kiên nhẫn đọc hết bài viết thì không tiếc gì chút ít thời gian  click vào các nút bên dưới để share bài viết để trang web được nhiều người biết tới hơn, và mình sẽ cố gắng viết thật nhiều bài chất lượng để chúng ta cùng: “chia sẽ nhiều hơn – phát triển nhiều hơn”. Thân ^^

Nguon : kungfuphp.com
Gửi bình luận bằng Facebook

Bài viết liên quan: