Метод абстракции в Scala обычно используется в типаже или абстрактном классе, который не обеспечивает полной реализации или определения тела.

Конкретный класс, который расширяет трейт или абстрактный класс, в котором определен абстрактный метод, должен предоставлять реализацию, в противном случае конкретный класс должен объявить себя абстрактным классом.

Пример:

черта животного {
def makeSound(): String
}

абстрактный класс утка расширяет животное {
// не обеспечивает реализацию для makeSound
}

class MandarinDuck extends duck {
def makeSound() : String = «Кря! Шарлатан!"
}

В приведенном выше примере у нас есть трейт-животное, у которого есть абстрактный метод makeSound, обратите внимание, что метод makeSound здесь не имеет полной реализации или определенного тела. Затем у нас есть конкретный класс утка, который расширяет признак животного, который не обеспечивает реализацию для абстрактного метода makeSound, что прекрасно, потому что сам класс утка объявлен как абстрактный класс.

Далее у нас есть класс MandarinDuck, который расширяет абстрактный класс duck, предоставляющий реализацию абстрактного метода makeSound.

По сути, вы говорите, что конкретный класс, который расширяет класс или черту, которая имеет абстрактный метод, должен включать и обеспечивать реализацию для абстрактного метода, но не знаете, как это сделать, и это как бы дает открытый контракт для разработчика, чтобы обеспечить реализацию в соответствии с там случай использования.

А используя метод абстракции в Scala, мы можем создавать лаконичный, гибкий и пригодный для повторного использования код.