📜  珀尔 | OOP 中的继承(1)

📅  最后修改于: 2023-12-03 15:40:50.776000             🧑  作者: Mango

珀尔 | OOP 中的继承

继承是面向对象编程(Object-Oriented Programming,OOP)中的一个核心概念,它是指一个类(称为子类或派生类)可以继承另一个类(称为父类或基类)的属性和方法。

为什么要使用继承?

使用继承可以使代码重用性更高,减少冗余代码。当多个类有相同的属性和方法时,可以将这些属性和方法抽象成一个父类,让子类继承它们。这样,如果需要修改这些共同的属性和方法,只需要在父类中进行修改即可,所有继承它的子类将自动继承这些修改。

继承的方式

在 Perl 中,使用 @ISA 数组指定类的父类。可以指定一个或多个父类,它们之间用逗号隔开。如果一个类指定了多个父类,它会继承它们所有的属性和方法。

示例代码:

package Person;

sub new {
    my ($class, $name, $age) = @_;
    my $self = {
        name => $name,
        age  => $age,
    };
    bless $self, $class;
    return $self;
}

sub say_hello {
    my $self = shift;
    print "Hello, my name is $self->{name}.\n";
}

package Student;
our @ISA = qw(Person);

sub new {
    my ($class, $name, $age, $grade) = @_;
    my $self = $class->SUPER::new($name, $age);
    $self->{grade} = $grade;
    bless $self, $class;
    return $self;
}

sub say_hello {
    my $self = shift;
    $self->SUPER::say_hello();
    print "I'm in grade $self->{grade}.\n";
}

my $person = Person->new("Tom", 20);
$person->say_hello();

my $student = Student->new("Jerry", 18, 12);
$student->say_hello();

输出结果:

Hello, my name is Tom.
Hello, my name is Jerry.
I'm in grade 12.

在上面的示例代码中,Person 是一个父类,Student 继承自 PersonStudent 重载了 say_hello 方法,在输出个人信息后再输出他/她的年级。

首先创建了一个 Person 对象,并调用其 say_hello 方法,输出个人基本信息。然后创建了一个 Student 对象,并调用其 say_hello 方法,输出个人基本信息和年级。

总结

继承是面向对象编程中非常重要的概念,它可以使代码更加高效、简洁、易于维护。在 Perl 中,使用 @ISA 数组指定类的父类,并通过 SUPER 调用父类的方法。