Perl OOPs中的继承性
继承是指任何类提取和使用其他类的特征的能力。它是一个过程,被称为派生类的新类是由称为基类的现有类创建的。这里的基本概念是,程序员能够将一个类的特征用于另一个类,而不需要在不同的类中反复声明或定义相同的东西。我们可以从基类中继承这些成员函数,而不是在每个类的声明中写成员函数。继承是面向对象编程中最重要的特征之一。
子类: 从另一个类继承属性的类被称为子类或派生类。
超级类: 其属性被子类继承的类被称为基类或超级类。
继承的最基本概念是 用另一个类作为基类来创建或派生一个新的类
基类和派生类
基类 被用来派生出额外的继承子类,称为 派生类 从一个基类中可以有多个派生类,这种类型的继承被称为 分层继承(Hierarchical Inheritance) 这些派生类共享一个父类或基类。如果一个派生类共享多个父类,并从多个父类中继承其特征,那么这种继承被称为 多重继承
上面的图片显示了一个类从基类派生的顺序。每当需要从理论上描述继承的顺序时,就会使用上图中的顺序和表示法。
考虑一个车辆类。现在我们需要为巴士、汽车、卡车等创建一个类。燃油量()、容量()、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;
myself = {
'name' => shift,
'employee_id' => shift
};
# Bless function to bind object to class
bless self,class;
# returning object from constructor
return $self;
}
1;
上面的代码是基类的定义。这里的基类是employee,其数据成员是雇员的ID和雇员的名字。这个父类的代码需要保存为*.pm
,这里我们将其保存为 employee.pm 现在我们将看到如何从已经声明的基类employee派生出一个类。
# Creating parent class
package Department;
use strict;
use warnings;
# Using class employee as parent
use parent 'employee';
1;
从上面的例子中可以看出,部门类使用了已经声明的雇员类的特质。所以在声明Department类时,我们没有再次声明所有的数据成员,而是从基类employee中继承了它们。要运行这段代码,将中间类的代码保存为*.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";
输出:
因此,当在一个大项目上工作,程序员想缩短代码时,继承起了非常重要的作用。