Программирование на языке D - абстрактные классы

Абстракция относится к способности сделать класс абстрактным в ООП. Абстрактный класс - это класс, который не может быть создан. Все остальные функции класса по-прежнему существуют, и все его поля, методы и конструкторы доступны одинаково. Вы просто не можете создать экземпляр абстрактного класса.

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

Использование абстрактного класса в D

Использовать abstractключевое слово для объявления абстрактного класса. Ключевое слово появляется в объявлении класса где-то перед ключевым словом class. Ниже показан пример того, как абстрактный класс может быть унаследован и использован.

пример

import std.stdio;
import std.string;
import std.datetime;

abstract class Person {
   int birthYear, birthDay, birthMonth; 
   string name; 
   
   int getAge() {
      SysTime sysTime = Clock.currTime(); 
      return sysTime.year - birthYear;
   }
}

class Employee : Person {
   int empID;
}

void main() {
   Employee emp = new Employee(); 
   emp.empID = 101; 
   emp.birthYear = 1980; 
   emp.birthDay = 10; 
   emp.birthMonth = 10; 
   emp.name = "Emp1"; 
   
   writeln(emp.name); 
   writeln(emp.getAge); 
}

Когда мы скомпилируем и запустим вышеуказанную программу, мы получим следующий результат.

Emp1
37

Абстрактные функции

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

пример

import std.stdio; 
import std.string; 
import std.datetime; 
 
abstract class Person { 
   int birthYear, birthDay, birthMonth; 
   string name; 
   
   int getAge() { 
      SysTime sysTime = Clock.currTime(); 
      return sysTime.year - birthYear; 
   } 
   abstract void print(); 
}
class Employee : Person { 
   int empID;  
   
   override void print() { 
      writeln("The employee details are as follows:"); 
      writeln("Emp ID: ", this.empID); 
      writeln("Emp Name: ", this.name); 
      writeln("Age: ",this.getAge); 
   } 
} 

void main() { 
   Employee emp = new Employee(); 
   emp.empID = 101; 
   emp.birthYear = 1980; 
   emp.birthDay = 10; 
   emp.birthMonth = 10; 
   emp.name = "Emp1"; 
   emp.print(); 
}

Когда мы скомпилируем и запустим вышеуказанную программу, мы получим следующий результат.

The employee details are as follows: 
Emp ID: 101 
Emp Name: Emp1 
Age: 37