2015-12-08 106 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的假设。

我宁愿把重点放在“支持构成而不是继承”上。