例如,buf是BAOS中受保护的变量。我想把它公开。目前,我使用重复名称
class Baos extends ByteArrayOutputStream {
def getbuf = buf // expose the buffer
}
我可以在不发明其他名称的情况下更改可见性吗,就像我覆盖方法一样?
buf
是受保护的变量:
26 package java.io;
...
45 public class ByteArrayOutputStream extends OutputStream {
46
47 /**
48 * The buffer where data is stored.
49 */
50 protected byte buf[];
因此,只有两种方法可以访问它:
- 像你一样暴露它,或者
- 从
java.io
包内的类访问它
我看不出有什么办法可以"改变能见度"。然而,我会问自己,为什么我想让这个内部变量公开,冒着利斯科夫替代原则问题的风险。
受保护变量通常具有一些内在不变性与他们有关联(否则他们将公开)。继承人需要维护那些人们可能会搞砸或故意破坏的财产违反
基类可能对buf
不被外部访问做了许多假设,以避免违反打开/关闭原则。
我宁愿把重点放在"偏爱组合而非继承"上。