理解 Perl 中的继承


面向对象编程有一个非常优秀且有用的概念叫做继承。继承简单来说就是父类的属性和方法可以被子类使用。因此,您不必一遍遍地编写相同的代码,只需继承父类即可。

例如,我们可以有一个 Employee 类,它继承自 Person 类。这被称为“is-a”关系,因为员工是人。Perl 有一个特殊的变量 @ISA 来辅助实现这一点。@ISA 控制(方法)继承。

使用继承时,需要考虑以下重要事项:

  • Perl 会在指定对象的类中搜索给定的方法或属性,即变量。
  • Perl 会搜索对象类 @ISA 数组中定义的类。
  • 如果在步骤 1 或 2 中找不到方法,则 Perl 会使用 AUTOLOAD 子例程(如果在 @ISA 树中找到)。
  • 如果仍然找不到匹配的方法,则 Perl 会在标准 Perl 库中提供的 UNIVERSAL 类(包)中搜索该方法。
  • 如果仍然找不到方法,则 Perl 将放弃并引发运行时异常。

因此,要创建一个新的 Employee 类来继承 Person 类的属性和方法,我们只需编写如下代码:将此代码保存到 Employee.pm 文件中。

#!/usr/bin/perl
package Employee;
use Person;
use strict;
our @ISA = qw(Person);       # inherits from Person

现在 Employee 类继承了 Person 类中所有的方法和属性,您可以像下面这样使用它们:使用 main.pl 文件进行测试:

#!/usr/bin/perl
use Employee;
$object = new Employee( "Mohammad", "Saleem", 23234345);
# Get first name which is set using constructor.
$firstName = $object->getFirstName();
print "Before Setting First Name is : $firstName\n";
# Now Set first name using helper function.
$object->setFirstName( "Mohd." );
# Now get first name set by helper function.
$firstName = $object->getFirstName();
print "After Setting First Name is : $firstName\n";

执行上述程序后,将产生以下结果:

First Name is Mohammad
Last Name is Saleem
SSN is 23234345
Before Setting First Name is : Mohammad
Before Setting First Name is : Mohd.

更新于:2019-12-02

1K+ 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告