May 16, 2014

Hình vuông kế thừa hình chữ nhật hay ngược lại ?

Đang lúc tìm câu trả lời cho một số câu hỏi đã vương vấn từ lâu, tình cờ đọc được một ví dụ rất lạ trên codeproject. Ví dụ này làm mình phải suy nghĩ lại về kế thừa, tưởng như đã quá hiển nhiên.
Con chó, con mèo, động vật, gần như quyển nào cũng có cái ví dụ này, sách nào cũng bảo con chó, con mèo kế thừa động vật.

Có hai lớp hình vuông và hình chữ nhật. Theo quy tắc hình học: "mọi hình vuông đều là hình chữ nhật, tuy nhiên không phải hình chữ nhật nào cũng là hình vuông". Kế thừa là mối quan hệ "is-a". Theo một lẽ rất tự nhiên, lớp hình vuông sẽ kế thừa lớp hình chữ nhật.

class Rectange
{
   width: number
   height: number
}

class Square : Rectange
{
}

Mình sử dụng 2 lớp như dưới đây

var a = new Rectange()
a.width = 10
a.height = 4

Square b = a;

Nhìn qua thì không có vấn đề gì cả, tuy nhiên nhìn kỹ vào logic thì thấy biến b có kiểu là hình vuông và tham chiếu đến hình có một cạnh là 10, một cạnh là 4 !

(sang trang)

No comments:

Post a Comment