Size: a a a

2021 June 22

P

Peter in Kotlin Start
А как у вас удаётся вызывать абстрактную функцию с ключом супер?
У меня вот не компилится, по очевидным причинам.
источник

FG

Fuad Garayev in Kotlin Start
сама функция без ключевого слова abstract.только класс
источник

Na

Neon an Děv 8) in Kotlin Start
Ну так суперкласс не имеет декларации метода, потому и не можете вызвать
источник

Na

Neon an Děv 8) in Kotlin Start
Что ему вызывать если наследуемая функция абстрактна
источник

FG

Fuad Garayev in Kotlin Start
я знаю что вы доходчиво объясниле в примере высше,но у меня вопрос немножко отличается.так есть разница между вызовом абстрактной функции с супером или без?заранее спасибо
источник

P

Peter in Kotlin Start
вы же сами сказали, что функция не абстрактная у вас =_=
источник

FG

Fuad Garayev in Kotlin Start
ой сорри,я не правильно написал.Функция которая находится в абстрактном классе.но сама функция абстрактной не является
источник

P

Peter in Kotlin Start
Давайте думать.
Что позволяет делать super?
Вызывать имплементацию базового класса.
То есть разница есть в вызовах функций у которых разное поведение в базовом классе и классе наследнике.
Например
источник

Na

Neon an Děv 8) in Kotlin Start
Вы не можете вызвать невыраженную функцию с super. Так как, как она может быть вызвана, с учетом того что в ней ничего нет?

super о том, что-бы вызвать выраженную функцию родительского класса (абстрактная функция не имеет логики потому вызвать super не получиться)
источник

Na

Neon an Děv 8) in Kotlin Start
Вы можете наследоватся от класса и не принимая логику предшественника, а можете принять и дополнить как я и показывал в примере выше
источник

FG

Fuad Garayev in Kotlin Start
кажется или я че то не догоняю,или вы не понимаете о чем я.

abstract class Foo() {
   fun start() {
       println("lolka")
   }
}

class FooImpl() : Foo() {
   fun main() {
       start() // в чем разница
       super.start() // в чем разница
   }

}
источник

BP

Bogdan Panchenko in Kotlin Start
все просто supper - это "магическая" ссылка на родитель
источник

FG

Fuad Garayev in Kotlin Start
если ответ в итоге будет
lolka
lolka
источник

BP

Bogdan Panchenko in Kotlin Start
да ничем, так как это одно и тоже, так как вы не переопределили метод.  super.start() -  исполняться обычно в методах которые переопределяют метод start, но нужно вызвать метод родителя
источник

BP

Bogdan Panchenko in Kotlin Start
чесно говоря странно так как start не помечен как open, но возможно для абстракных классов это как раз дефолт
источник

FG

Fuad Garayev in Kotlin Start
Ну так вот мне это и нужно было узнать)мне не нужно переопределять функцию в данном случае.у меня абстрактный класс в котором уже готовая логика,работа с микрофоном и ТД.мне просто нужно впихнуть эту логику в другие классы, использовать как шаблон так скажем
источник

FG

Fuad Garayev in Kotlin Start
Спасибо всем за ответы,а насчёт переопределение - весьма интересно , пойду изучать углублённо
источник

Na

Neon an Děv 8) in Kotlin Start
да, у interface / abstract class все по дефолту open, да и не может быть не опен (насколько я помню, разве что ещё internal / protected)
источник

Na

Neon an Děv 8) in Kotlin Start
я вродь несколько раз сказал, что super для вызова родительской логики
источник

P

Peter in Kotlin Start
У абстракт класса как-то не всё опен по дефолту.
источник