Наследование в Скала

Наследование в Скала

#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 программа для иллюстрации
  • // одиночное наследование
  •   
  • // Базовый класс
  • class Parent
  • {
  •     var Name: String = "Ankita"
  • }
  •   
  • // Производный класс
  • // Используем ключевое слово extends
  • class Child extends Parent
  • {
  •     var Age: Int = 22
  •       
  •     // Метод
  •     def details()
  •     {
  •     println("Name: " +Name);
  •     println("Age: " +Age);
  •     }
  • }
  •   
  • object Main
  • {
  •       
  •     // Код драйвера
  •     def main(args: Array[String]) 
  •     {
  •           
  •         // Создание объекта производного класса
  •         val ob = new Child();
  •         ob.details();
  •     }
  • }
  • Выход:
Name: Ankita
Age: 22
  • Многоуровневое наследование. В многоуровневом наследовании производный класс будет наследовать базовый класс, а также производный класс также будет выступать в качестве базового класса для другого класса. На изображении ниже класс A служит базовым классом для производного класса B, который, в свою очередь, служит базовым классом для производного класса C.
  • Пример:
  • // Scala программа для иллюстрации
  • // Многоуровневое наследование
  •   
  • // Базовый класс
  • class Parent
  • {
  •     var Name: String = "Soniya"
  • }
  •   
  • // Получено из родительского класса
  • // Базовый класс для класса Child2
  • class Child1 extends Parent
  • {
  •     var Age: Int = 32
  • }
  •   
  • // Получено из класса Child1
  • class Child2 extends Child1
  • {
  •     // Метод
  •     def details(){
  •     println("Name: " +Name);
  •     println("Age: " +Age);
  •     }
  • }
  •   
  • object Main
  • {
  •       
  •     // Управляемый код
  •     def main(args: Array[String]) 
  •     {
  •           
  •         // Создание объекта производного класса
  •         val ob = new Child2();
  •         ob.details();
  •     }
  • }
  • Выход:
Name: Soniya
Age: 32
  • Иерархическое наследование. В иерархическом наследовании один класс служит суперклассом (базовым классом) для более чем одного подкласса. На рисунке ниже класс A служит базовым классом для производного класса B, C и D.
  • Пример:
  • // Scala программа для иллюстрации
  • // Иерархическое наследование
  •   
  • // Базовый класс
  • class Parent
  • {
  •     var Name1: String = "Siya"
  •     var Name2: String = "Soniya"
  • }
  •   
  • // Получено из родительского класса
  • class Child1 extends Parent
  • {
  •     var Age: Int = 32
  •     def details1()
  •     {
  •     println(" Name: " +Name1);
  •     println(" Age: " +Age);
  •     }
  • }
  •   
  • // Получено из родительского класса
  • class Child2 extends Parent
  • {
  •     var Height: Int = 164
  •       
  •     // Метод
  •     def details2()
  •     {
  •     println(" Name: " +Name2);
  •     println(" Height: " +Height);
  •     }
  • }
  •   
  • object Main 
  • {
  •       
  •     // Код драйвера
  •     def main(args: Array[String]) 
  •     {
  •           
  •         // Создание объектов обоих производных классов
  •         val ob1 = new Child1();
  •         val ob2 = new Child2();
  •         ob1.details1();
  •         ob2.details2();
  •     }
  • }
  • Выход:
 Name: Siya
 Age: 32
 Name: Soniya
 Height: 164
  • Множественное наследование. В множественном наследовании один класс может иметь более одного суперкласса и наследовать функции от всех родительских классов. Scala не поддерживает множественное наследование с классами, но это может быть достигнуто с помощью признаков.
  • Пример:
  • // Scala программа для иллюстрации
  • // множественное наследование с использованием признаков
  •   
  • // Черта 1
  • trait Geeks1
  • {
  •     def method1()
  • }
  •   
  • // Черта 2
  • trait Geeks2
  • {
  •     def method2()
  • }
  •   
  • // Класс, реализующий черты Geeks1 и Geeks2
  • class GFG extends Geeks1 with Geeks2
  • {
  •       
  •     // method1 от Geeks1
  •     def method1()
  •     {
  •         println("Trait 1");
  •     }
  •       
  •     // method2 от Geeks2
  •     def method2()
  •     {
  •         println("Trait 2");
  •     }
  • }
  • object Main 
  • {
  •     // Код драйвера
  •     def main(args: Array[String])
  •     {
  •           
  •         // Создание объекта класса GFG
  •         var obj = new GFG();
  •         obj.method1();
  •         obj.method2();
  •     }
  • }
  • Выход:
Trait 1
Trait 2
  • Гибридное наследование: это сочетание двух или более указанных выше типов наследования. Поскольку Scala не поддерживает множественное наследование с классами, гибридное наследование также невозможно с классами. В Scala мы можем достичь гибридного наследования только через черты.


Report Page