2015-12-08 159 views
1

例如,buf在BAOS中是受保護的變量。我想把它公開。目前,我求助於重複名稱你如何覆蓋斯卡拉字段?

class Baos extends ByteArrayOutputStream { 
     def getbuf = buf // expose the buffer 
    } 

我可以改變的知名度,而不用發明的另一個名字,就像我覆蓋的方法?

+0

我認爲這是不可能的。你的解決方案有什麼問題? –

回答

2

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[]; 

所以,唯一的2種方式來訪問它是:

  • 露出它像你這樣或
  • java.io內從類訪問它包

我沒有看到任何方式「改變能見度」。但是我會問自己爲什麼我想讓這個內部變量可以公開訪問,冒着Liskov substitution principle問題。

受保護的變量通常有一些固有的不變性 與他們相關聯(否則他們會公開)。繼承者則需要 來維護那些屬性,人們可以搞砸或故意 違反。

基類可能會做出很多關於buf不被外部訪問以不違反Open/closed principle的假設。

我寧願把重點放在「支持構成而不是繼承」上。