Я довольно новичок в Scala, и мне было интересно, как лучше организовать иерархию для классов и их сопутствующих объектов.
Предположим, у меня есть базовый класс или интерфейс, который я хочурасширить.В Python я бы сделал что-то вроде этого:
class Base(object):
def an_instance_method(self):
return 0
@classmethod
def a_class_method(cls):
return 1
def another_instance_method(self):
raise NotImplentedError()
@classmethod
def another_class_method(cls):
raise NotImplementedError()
class A(Base):
def another_instance_method(self):
return self.an_instance_method() + 1
@classmethod
def another_class_method(cls):
return cls.a_class_method() + 1
class B(Base):
def another_instance_method(self):
return self.an_instance_method() + 2
@classmethod
def another_class_method(cls):
return cls.a_class_method() + 2
Мое текущее решение Scala следующее:
trait Base {
def an_instance_method(): Int = 0
def another_instance_method(): Int
}
trait BaseCompanion {
def a_class_method(): Int = 1
def another_class_method(): Int
}
class A extends Base {
override def another_instance_method(): Int = an_instance_method() + 1
}
object A extends BaseCompanion {
override def another_class_method(): Int = a_class_method() + 1
}
class B extends Base {
override def another_instance_method(): Int = an_instance_method() + 2
}
object B extends BaseCompanion {
override def another_class_method(): Int = a_class_method() + 2
}
Есть ли лучший способ?