Scala: расширение базового класса, содержащего метод apply - PullRequest
0 голосов
/ 28 апреля 2020

У меня есть базовый класс в «общем» модуле, который выглядит следующим образом:

class BaseClass(args: Seq[String] = Seq()) extends Serializable {
  private val argMap: Map[String, String] = 

 // <More code here...>

object BaseClass {
 def apply(args: Seq[String] = Seq()): BaseClass = new BaseClass(args)
}

Теперь я хочу расширить этот BaseClass в своем «модуле», поэтому я пытаюсь это ...

class MyNewClass(args: Seq[String] = Seq()) extends com.xyz.BaseClass {
   // Add additional code here
}
object MyNewClass extends com.xyz.BaseClass {
  def apply(args: Seq[String] = Seq()): MyNewClass = new com.xyz.MyNewClass(args)
}

Насколько я понимаю, когда я создаю экземпляр MyNewClass, он автоматически создает экземпляр и вызывает метод apply для базового класса, но этого не происходит. Как правильно расширить BaseClass таким образом, чтобы все его переменные и методы могли быть доступны через класс Child?

1 Ответ

1 голос
/ 29 апреля 2020

Насколько я понимаю, когда я создаю экземпляр MyNewClass, он автоматически создает экземпляр и вызывает метод 'apply' базового класса ...

Ваше понимание не совсем верно.

extends com.xyz.BaseClass означает, что этот класс наследует от базового class, а не от одиночного object.

И new com.xyz.MyNewClass(args) создает новый экземпляр указанного класса, минуя apply() метод в любом объекте-компаньоне.

Как правильно расширить BaseClass таким образом, чтобы все его переменные и методы могли быть доступны через класс Child?

Текущий код делает именно это. MyNewClass и его сопутствующий объект наследуют все члены от BaseClass. Ничто не наследуется от объекта-компаньона BaseClass, потому что вы не можете расширить object, и вы не наследуете права доступа от BasseClass, поэтому экземпляр BaseClass может получить доступ к закрытым членам BaseClass сопутствующий объект, экземпляр MyNewClass не может.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...