Я думаю (если я правильно понял ваш вопрос), что явное объявление типа member
будет делать то, что вы хотите, например,
interface SomeInterface
class Implementation : SomeInterface
class Test {
val member: SomeInterface = Implementation()
}
ОБНОВЛЕНИЕ : после вопросаобновлен, чтобы уточнить, что в классе Test member
должен иметь тип Implementation
, а не SomeInterface
...
Я не думаю, что то, что вы пытаетесь сделать, может быть сделано безпеременная-член, как вы предлагаете в своем вопросе.Однако, если у вас есть базовый класс, который определяет, каким должен быть member
, вы можете делать то, что вы хотите:
interface SomeInterface
class Implementation : SomeInterface
abstract class Super {
abstract val member: SomeInterface
}
class Test : Super() {
override val member = Implementation()
// declared as Implementation, but does correctly implement superclass which wants this to be a SomeInterface.
// In this class, member is of type Implementation.
}
fun test() {
val test1 = Test()
val member1 = test1.member // member1 is an Implementation object
val test2: Super = Test()
val member2 = test2.member // member2 is a SomeInterface object
}
То, что показано выше, это то, что вы можете иметьmember
, который доступен в вашем классе как Implementation
, но виден за пределами класса как SomeInterface
.Но только если, когда вы работаете с ним вне класса, вы работаете с ним как с экземпляром суперкласса, который определяет member
как тип SomeInterface
.