Một cái gì đó tôi thực sự chưa từng nghĩ đến trước đây (cú pháp AS3):
private var m_obj:Object;
protected function get obj():Object
{
return m_obj;
}
private var m_str:String;
protected function get str():String
{
return m_str;
}
Ít nhất các lớp con sẽ không thể đặt m_obj hoặc m_str (mặc dù chúng vẫn có thể sửa đổi m_obj).
Câu hỏi của tôi: Đây có phải là quá mức trắng trợn?
Câu hỏi của Lập trình viên này: Khi nào hoặc tại sao người ta nên sử dụng getters / setters cho các thuộc tính lớp thay vì chỉ đơn giản là biến chúng thành thuộc tính công khai? đã được đề xuất như là một bản sao.
Câu hỏi đó là khác nhau bởi vì nó chỉ giải quyết các thuộc tính công cộng và riêng tư và liệu một tài sản có nên được bọc bằng getters & setters hay không. Đối với câu hỏi của tôi, tôi đang tập trung vào các biến được bảo vệ và cách các lớp kế thừa sẽ tương tác với các biến đó.
Vì vậy, việc thực hiện thay thế sẽ là:
protected var m_obj:Object; //more accessible than a private variable with a protected getter
protected var m_str:String; //more accessible than a private variable with a protected getter
Câu hỏi của tôi tương tự bởi vì tôi đang nói về việc sử dụng các getters được bảo vệ tầm thường để chặn các lớp con viết thành các biến, nhưng để cho phép tất cả các truy cập khác.
Trong các ngôn ngữ như AS3, điều này thậm chí sẽ cho phép họ thực hiện bất kỳ thay đổi nào đối với các biến đối tượng có thể thay đổi, miễn là bản thân các tham chiếu không được sửa đổi.