Котлин, вторичный конструктор детского класса - PullRequest
0 голосов
/ 05 сентября 2018

Я пытаюсь вызвать второй конструктор родителя вот так

abstract class A(val i: Int) {
    constructor(c: C) : this(c.i)
}

class B() : A(0) {
    constructor(c: C) : super(c) // error is here
}

class C(val i: Int)

но выдает ошибку Primary constructor call expected. Как дочерний класс может вызвать вторичный конструктор родителя?

1 Ответ

0 голосов
/ 05 сентября 2018

Согласно документ :

Если класс имеет первичный конструктор, каждый вторичный конструктор необходимо делегировать первичному конструктору напрямую или косвенно через другой вторичный конструктор (ы). Делегирование другому конструктору того же класса выполняется с помощью ключевого слова this

Вы объявляете первичный конструктор для B (т.е. B()), поэтому вторичный конструктор должен вызывать свой первичный конструктор.

Как дочерний класс может вызывать вторичный конструктор родителя?

Если вы хотите, чтобы вторичный конструктор вызывал вторичный конструктор родителя, вы должны сначала удалить первичный конструктор B.

abstract class A(val i: Int) {
    constructor(c: C) : this(c.i)
}

class B : A {
    constructor(c: C) : super(c)
}

class C(val i: Int)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...