Algo en lo que realmente no había pensado antes (sintaxis 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;
}
Al menos las subclases no podrán establecer m_obj o m_str (aunque aún podrían modificar m_obj).
Mi pregunta: ¿Es esto simplemente una exageración descarada?
La pregunta de este Programador: ¿ Cuándo o por qué debería uno usar getters / setters para propiedades de clase en lugar de simplemente hacerlas públicas? ha sido sugerido como un duplicado.
Esa pregunta es diferente porque solo aborda las propiedades públicas y privadas y si una propiedad debe envolverse con captadores y establecedores. Para mi pregunta, me estoy centrando en variables protegidas y cómo las clases heredadas interactuarían con esas variables.
Entonces la implementación alternativa sería:
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
Mi pregunta es similar porque estoy hablando sobre el uso de getters triviales protegidos para evitar que las subclases escriban en las variables, pero para permitirles el acceso a todos los demás.
En lenguajes como AS3, esto incluso les permitirá realizar cambios en las variables de objeto mutable, siempre que las referencias mismas no se modifiquen.