📜  珀尔 | OOP 中的继承

📅  最后修改于: 2022-05-13 01:54:24.092000             🧑  作者: Mango

珀尔 | OOP 中的继承

继承是任何类提取和使用其他类特征的能力。这是从称为基类的现有类创建称为派生类的新类的过程。这里的基本概念是程序员能够将一个类的特性用于另一个类,而无需在不同的类中一次又一次地声明或定义相同的东西。我们可以从基类继承那些成员函数,而不是在每个类声明期间编写成员函数。继承是面向对象编程最重要的特性之一。

子类:从另一个类继承属性的类称为子类或派生类。
超类:属性被子类继承的类称为基类或超类

基类和派生类

基类用于派生额外的继承子类,称为派生类。一个基类可以有多个派生类,这种类型的继承称为层次继承。这些派生类共享一个父类或基类。如果派生类共享多个 Parent 类并从多个父类继承其特性,则这种继承称为Multiple Inheritance


上图显示了类从基类派生的顺序。每当需要从理论上描述继承顺序时,就会使用如上图所示的顺序和符号。

考虑一类车辆。现在我们需要为 Bus、Car、truck 等创建一个类。对于所有车辆,fuelAmount()、capacity()、applyBrakes() 方法都是相同的。如果我们在没有继承知识的情况下创建这些类,那么我们可能会按照图中所示的方式进行操作:

上图显示了在没有继承概念的情况下创建这些类

可以清楚地看到,上述过程导致相同代码重复3次。这增加了错误和数据冗余的机会。为了避免这种情况,使用了继承。如果我们创建一个Vehicle类并在其中编写这三个函数,并从vehicle类中继承其余的类,那么我们可以简单地避免数据重复并增加可重用性。看下图,其中三个类继承自车辆类:


使用继承,我们只需要编写一次函数而不是三次,因为我们从基类(Vehicle)继承了其余三个类。

多级继承

Perl 中的继承可以有多种类型,但多级继承是一种由基类和派生类组成的链。在多级继承中,派生类将继承一个基类,并且派生类也充当其他类的基类。在下图中,A 类作为派生类 B 的基类,而 B 又作为派生类 C 的基类

在 Perl 中实现继承:

Perl 中的继承可以通过使用包来实现。包用于创建一个父类,该父类可以在派生类中用于继承功能。

use strict;
use warnings;
  
# Creating parent class
package Employee;
  
# Creating constructor
sub new
{
    # shift will take package name 'employee' 
    # and assign it to variable 'class'
    my $class = shift;
      
    my $self = {
                'name' => shift,
                'employee_id' => shift
               };
      
    # Bless function to bind object to class
    bless $self, $class;
      
    # returning object from constructor
    return $self;
}
1;

上面的代码是基类的定义。这里的基类是员工,数据成员是员工 ID 和员工姓名。父类的这段代码需要保存为 *.pm ,这里我们将它保存为employee.pm 。我们现在将看到如何从已经声明的基类雇员派生一个类。

# Creating parent class
package Department;
   
use strict;
use warnings;
   
# Using class employee as parent 
use parent 'employee';
   
1;

如上例所示,Department 类使用已声明的类雇员的特征。因此,在声明 Department 类时,我们没有再次声明所有数据成员,而是从基类雇员那里继承它们。要运行此代码,请将中间类代码保存为 *.pm,此处保存为Department.pm 。此类是中间类,并将进一步作为以下给定派生文件data.pl的父类。

use strict;
use warnings;
   
# Using Department class as parent
use Department;
  
# Creating object and assigning values 
my $a = Department->new("Shikhar",18017);
   
# Printing the required fields
print "$a->{'name'}\n";
print "$a->{'employee_id'}\n";

输出:

因此,在处理大型项目并且程序员想要缩短代码时,继承起着非常重要的作用。