Учебники

D Программирование — Абстрактные классы

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

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

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

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

пример

Live Demo

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

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

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

пример

Live Demo

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(); 
}

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