Perl OOP中的继承详细指南

2021年3月10日16:20:22 发表评论 866 次浏览

本文概述

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

子类:

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

超级班:

其属性被子类继承的类称为基类或超类。

继承的最基本概念是使用另一个类作为基础来创建或派生一个新类。

基类和派生类

基类用于派生称为的其他继承子类派生类。一个基类可以有多个派生类, 这种继承类型称为层次继承。这些派生类共享一个父类或基类。如果派生类共享多个父类并从多个父类继承其功能, 则这种继承称为多重继承.

Perl | OOP中的继承1

上图显示了从基类派生一个类的顺序。每当需要从理论上描述继承顺序时, 都将使用如上图所示的顺序和表示法。

考虑一类车辆。现在, 我们需要为公共汽车, 汽车, 卡车等创建一个类。所有车辆的方法fuelAmount(), capacity(), applyBrakes()都相同。如果我们在不了解继承的情况下创建这些类, 则可以按照下图所示的方式进行:

Perl | OOP中的继承2

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

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

Perl | OOP中的继承3

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

多级继承

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

Perl | OOP中的继承4

在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, 这里我们将其另存为员工。现在, 我们将了解如何从已经声明的基类雇员派生一个类。

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

从上面的示例可以看出, 班级部门使用已经声明的班级雇员的特征。因此, 在声明类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" ;

输出如下:

Perl | OOP中的继承5

因此, 当在大型项目中工作时, 继承起着至关重要的作用, 程序员希望缩短代码。


木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: