2015-12-08 3 views
1

Например, buf является защищенной переменной в BAOS. Я хотел бы сделать его общедоступным. В настоящее время, я прибегаю к повторяющемуся имениКак вы переопределяете поля в Scala?

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.

Я предпочел бы сосредоточиться на «композиции предпочтения над наследованием».