Những chức năng Đối Tượng mới của (phần III) Dùng OO trong Ngăn cản Thừa kế Bình thường (By default) class nào cũng có thể được dùng làm base class để từ đó ta thừa kế. Nhưng đôi khi ta không muốn cho ai thừa kế từ một Class nào đó, để làm việc ấy ta dùng keyword NotInheritable khi declare class: Public NotInheritable Class KhôngCon End Class Khi ta đã dùng keyword NotInheritable rồi thì không class nào có thể dùng keyword Inherits để tạo một subclass từ class ấy. Thừa kế và Phạm vi hoạt động Khi ta dùng đặc. | Bài 6 Những chức năng Đối Tượng mới của phần III Dùng OO trong Ngăn cản Thừa kế Bình thường By default class nào cũng có thể được dùng làm base class để từ đó ta thừa kế. Nhưng đôi khi ta không muốn cho ai thừa kế từ một Class nào đó để làm việc ấy ta dùng keyword NotInheritable khi declare class Public NotInheritable Class KhôngCon End Class Khi ta đã dùng keyword NotInheritable rồi thì không class nào có thể dùng keyword Inherits để tạo một subclass từ class ấy. Thừa kế và Phạm vi hoạt động Khi ta dùng đặc tính thừa kế để tạo một SubClass thì class mới nầy có đủ mọi methods properties và variables với Access Modifier Public hay Friend của SuperClass. Bất cứ thứ gì declared là Private trong SuperClass thì SubClass không thấy hay dùng được. Có một ngoại lệ là New method. Các Constructor methods cần phải được implemented định nghĩa lại trong mỗi SubClass. Một chốc nữa ta sẽ bàn vào chi tiết về điểm nầy. Để làm sáng tỏ vấn đề SubClass có thể dùng Class Members nào của SuperClass ta thử code lại Function Amount trong LineItem class bằng cách khiến nó gọi một Private Function tên CalculateAmount để tính ra Amount thay vì để nó tính trực tiếp như trước đây Public Function Amount As Single Return CalculateAmount End Function Private Function CalculateAmount As Single Return mintQuantity msngPrice End Function Khi ta SubClass Lineitem để tạo ra ServiceLine class bất cứ Object ServiceLine nào cũng thừa kế Function Amount vì Function ấy được declared Public trong BaseClass Lineitem. Ngược lại vì Function CalculateAmount là Private nên cả ServiceLine class lẫn bất cứ client code nào dùng một Lineitem Object đều không truy cập nó được. Như thế mặc dầu ta gọi Function Amount được nhưng đến phiên nó gọi Private Function CalculateAmount thì có bị trở ngại không Không sao cả. Vì Function Amount nằm trong cùng Class với Private Function CalculateAmount nên nó có thể gọi được dù rằng ta gọi Function Amount từ ServiceLine hay client code. Thí dụ trong client code ta có