如何覆盖Scala中的字段



例如,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不被外部访问做了许多假设,以避免违反打开/关闭原则。

我宁愿把重点放在"偏爱组合而非继承"上。

最新更新