本文概述
- 基类和派生类
- 多级继承
子类:
从另一个类继承属性的类称为子类或派生类。
超级班:
其属性被子类继承的类称为基类或超类。
继承的最基本概念是使用另一个类作为基础来创建或派生一个新类。基类和派生类 基类用于派生称为的其他继承子类派生类。一个基类可以有多个派生类, 这种继承类型称为层次继承。这些派生类共享一个父类或基类。如果派生类共享多个父类并从多个父类继承其功能, 则这种继承称为多重继承.
文章图片
上图显示了从基类派生一个类的顺序。每当需要从理论上描述继承顺序时, 都将使用如上图所示的顺序和表示法。
考虑一类车辆。现在, 我们需要为公共汽车, 汽车, 卡车等创建一个类。所有车辆的方法fuelAmount(), capacity(), applyBrakes()都相同。如果我们在不了解继承的情况下创建这些类, 则可以按照下图所示的方式进行:
文章图片
上图显示了没有继承概念的这些类的创建
可以清楚地看到, 上述过程导致相同代码重复3次。这增加了错误和数据冗余的机会。为了避免这种情况, 将使用继承。如果我们创建一个Vehicle类并在其中编写这三个函数, 并从Vehicle类继承其余的类, 那么我们可以简单地避免数据重复并提高可重用性。请看下图, 其中三个类别是从车辆类别继承的:
文章图片
使用继承, 我们只需要编写函数一次, 而不是编写函数三遍, 因为我们已经从基类(Vehicle)继承了其余三个类。
多级继承 Perl中的继承可以有多种类型, 但是多级继承是其中的基础类和派生类组成链的一种。在"多级继承"中, 派生类将继承基类, 并且派生类还充当其他类的基类。在下图中, 类A用作派生类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, 这里我们将其另存为员工。现在, 我们将了解如何从已经声明的基类雇员派生一个类。
# 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中的继承详细指南】因此, 当在大型项目中工作时, 继承起着至关重要的作用, 程序员希望缩短代码。
推荐阅读
- Python-Tkinter滚动条用法介绍
- 算法设计(最小数k,以使k的数字乘积等于n)
- C#条件语句(if,if-else,if-else-if阶梯,嵌套的if,switch,嵌套的switch)
- 如何使用JavaScript或jQuery重定向到另一个页面(有哪些方式?)
- JavaScript是一种引用传递还是值传递的语言(如何区分?)
- 在JavaScript中如何格式化日期(有几种方式?哪种提供完全自定义格式化?)
- JavaScript中如何有效地深拷贝一个对象()
- 在JavaScript中使用哪个等号(== vs ===)进行比较操作好()
- var functionName=function(){}和functionName=function(){}有什么区别()