Ruby không có lớp lồng nhau.
Cách duy nhất để kế thừa hành vi là, tốt, thông qua kế thừa.
Nếu bạn muốn mã của mình hoạt động, bạn cần sử dụng ngôn ngữ hỗ trợ các lớp lồng nhau. Trong khi đây là một tính năng gọn gàng và mạnh mẽ vô cùng, tôi không may biết chỉ có hai ngôn ngữ mà đã lồng các lớp:
- BETA, ngôn ngữ mà giới thiệu các lớp lồng nhau (và người kế nhiệm của nó gbeta)
- Newspeak
Tôi không biết điều gì khác.
Java có cấu trúc được gọi là các lớp lồng nhau, nhưng chúng có một số hạn chế thiết kế không may.
Trong ví dụ của bạn ở trên, nó không phải là lớp B
được lồng vào bên trong A
, nó là liên tụcB
được lồng vào bên trong A
. Hãy nghĩ về điều này:
C = A::B
Bây giờ, lớp được phát hành theo hai tên: A::B
và C
. Phải rõ ràng là C
là toàn cầu và không được lồng vào bên trong A
. (Vâng, thực ra, C
được lồng bên trong Object
, bởi vì không có hằng số thực sự toàn cầu, nhưng đó là bên cạnh điểm.) Nhưng vì C
và A::B
là cùng một lớp, rõ ràng là không thể lồng nhau và không lồng nhau. Kết luận hợp lý duy nhất là lớp chính nó không được lồng nhau.
Tính năng xác định của các lớp lồng nhau là tra cứu phương pháp đi dọc theo hai chiều: nâng chuỗi thừa kế và ra ngoài qua lồng. Ruby, giống như 99,9% của tất cả các ngôn ngữ OO, chỉ hỗ trợ các ngôn ngữ cũ. (Trong một số nghĩa nào đó, các lớp lồng nhau không chỉ thừa hưởng các đặc tính của lớp cha của chúng, mà còn là các tính năng của lớp xung quanh của chúng.)
Nguồn
2011-02-04 22:39:30
Đặt 'B' kế thừa' A'? – adamax