Наследование в Скала
#ScalaНаследование является важной опорой ООП (объектно-ориентированного программирования). Это механизм в Scala, с помощью которого одному классу разрешается наследовать свойства (поля и методы) другого класса.
Важная терминология:
- Суперкласс : класс, свойства которого наследуются, называется суперклассом (или базовым классом, или родительским классом).
- Подкласс : Класс, который наследует другой класс, известен как подкласс (или производный класс, расширенный класс или дочерний класс). Подкласс может добавлять свои собственные поля и методы в дополнение к полям и методам суперкласса.
- Возможность повторного использования: Наследование поддерживает концепцию «повторного использования», т.е. когда мы хотим создать новый класс и уже существует класс, который включает в себя часть кода, который мы хотим, мы можем получить наш новый класс из существующего класса. Делая это, мы повторно используем поля и методы существующего класса.
Как использовать наследование в Scala
Ключевое слово, используемое для наследования, расширяет .
Синтаксис:
class parent_class_name extends child_class_name{
// Methods and fields
}
Пример:
// Scala программа для иллюстрации
// реализация наследования
// Базовый класс
class Geeks1{
var Name: String = "Ankita"
}
// Производный класс
// Используем ключевое слово extends
class Geeks2 extends Geeks1
{
var Article_no: Int = 130
// Метод
def details()
{
println("Author name: " +Name);
println("Total numbers of articles: " +Article_no);
}
}
object Main
{
// Код драйвера
def main(args: Array[String])
{
// Создание объекта производного класса
val ob = new Geeks2();
ob.details();
}
}
Выход:
Author name: Ankita Total numbers of articles: 130
Объяснение: В приведенном выше примере Geeks1 является базовым классом, а Geeks2 является производным классом, который является производным от Geeks1 с использованием ключевого слова extends. В методе main при создании объекта класса Geeks2 копия всех методов и полей базового класса получает память в этом объекте. Вот почему, используя объект производного класса, мы также можем получить доступ к членам базового класса.
Тип наследования
Ниже приведены различные типы наследования, которые поддерживаются в Scala.
- Одиночное наследование. При одиночном наследовании производный класс наследует признаки одного базового класса. На изображении ниже класс A служит базовым классом для производного класса B.

- Пример:
// Scala программа для иллюстрации// одиночное наследование// Базовый классclassParent{varName:String ="Ankita"}// Производный класс// Используем ключевое слово extendsclassChild extendsParent{varAge:Int =22// Методdefdetails(){println("Name: "+Name);println("Age: "+Age);}}objectMain{// Код драйвераdefmain(args:Array[String]){// Создание объекта производного классаvalob =newChild();ob.details();}}- Выход:
Name: Ankita Age: 22
- Многоуровневое наследование. В многоуровневом наследовании производный класс будет наследовать базовый класс, а также производный класс также будет выступать в качестве базового класса для другого класса. На изображении ниже класс A служит базовым классом для производного класса B, который, в свою очередь, служит базовым классом для производного класса C.

- Пример:
// Scala программа для иллюстрации// Многоуровневое наследование// Базовый классclassParent{varName:String ="Soniya"}// Получено из родительского класса// Базовый класс для класса Child2classChild1extendsParent{varAge:Int =32}// Получено из класса Child1classChild2extendsChild1{// Методdefdetails(){println("Name: "+Name);println("Age: "+Age);}}objectMain{// Управляемый кодdefmain(args:Array[String]){// Создание объекта производного классаvalob =newChild2();ob.details();}}- Выход:
Name: Soniya Age: 32
- Иерархическое наследование. В иерархическом наследовании один класс служит суперклассом (базовым классом) для более чем одного подкласса. На рисунке ниже класс A служит базовым классом для производного класса B, C и D.

- Пример:
// Scala программа для иллюстрации// Иерархическое наследование// Базовый классclassParent{varName1:String ="Siya"varName2:String ="Soniya"}// Получено из родительского классаclassChild1extendsParent{varAge:Int =32defdetails1(){println(" Name: "+Name1);println(" Age: "+Age);}}// Получено из родительского классаclassChild2extendsParent{varHeight:Int =164// Методdefdetails2(){println(" Name: "+Name2);println(" Height: "+Height);}}objectMain{// Код драйвераdefmain(args:Array[String]){// Создание объектов обоих производных классовvalob1=newChild1();valob2=newChild2();ob1.details1();ob2.details2();}}- Выход:
Name: Siya Age: 32 Name: Soniya Height: 164
- Множественное наследование. В множественном наследовании один класс может иметь более одного суперкласса и наследовать функции от всех родительских классов. Scala не поддерживает множественное наследование с классами, но это может быть достигнуто с помощью признаков.

- Пример:
// Scala программа для иллюстрации// множественное наследование с использованием признаков// Черта 1traitGeeks1{defmethod1()}// Черта 2traitGeeks2{defmethod2()}// Класс, реализующий черты Geeks1 и Geeks2classGFG extendsGeeks1withGeeks2{// method1 от Geeks1defmethod1(){println("Trait 1");}// method2 от Geeks2defmethod2(){println("Trait 2");}}objectMain{// Код драйвераdefmain(args:Array[String]){// Создание объекта класса GFGvarobj =newGFG();obj.method1();obj.method2();}}- Выход:
Trait 1 Trait 2
- Гибридное наследование: это сочетание двух или более указанных выше типов наследования. Поскольку Scala не поддерживает множественное наследование с классами, гибридное наследование также невозможно с классами. В Scala мы можем достичь гибридного наследования только через черты.
