文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

剖析php继承与多态之妙:轻松掌握面向对象三大特性

2024-02-04 10:29

关注

PHP中,继承与多态是面向对象编程的重要特性。继承允许对象获取其他对象的属性和方法,多态允许子类重写父类的方法。本文将深入剖析继承与多态机制,帮助您轻松掌握面向对象编程的核心思想。

1. 继承机制

继承机制允许一个类继承另一个类(父类)的属性和方法。子类可以重写父类的方法,从而拥有不同的行为。继承关系使用关键字extends来定义。例如:

class Animal {
    protected $name;

    public function getName() {
        return $this->name;
    }
}

class Dog extends Animal {
    public function bark() {
        echo "Woof!";
    }
}

$dog = new Dog();
echo $dog->getName(); // Output: null
$dog->bark(); // Output: Woof!

在上面的示例中,Dog类继承了Animal类的属性和方法。Dog类重写了getName方法,并添加了自己的方法bark。因此,Dog对象可以调用getName方法和bark方法,而Animal对象只能调用getName方法。

1.1 访问权限

子类可以访问父类的公有和受保护的属性和方法。子类不能访问父类的私有属性和方法。例如:

class Animal {
    private $age;

    public function getAge() {
        return $this->age;
    }
}

class Dog extends Animal {
    public function getPrivateAge() {
        return $this->age; // Error: Cannot access private property
    }
}

在上面的示例中,Dog类无法访问父类Animal类的私有属性age

1.2 构造方法和析构方法

当子类对象被创建时,它的构造方法会自动调用父类的构造方法。当子类对象被销毁时,它的析构方法会自动调用父类的析构方法。例如:

class Animal {
    public function __construct($name) {
        $this->name = $name;
        echo "Animal constructor called
";
    }

    public function __destruct() {
        echo "Animal destructor called
";
    }
}

class Dog extends Animal {
    public function __construct($name, $breed) {
        parent::__construct($name); // Call the parent constructor
        $this->breed = $breed;
        echo "Dog constructor called
";
    }

    public function __destruct() {
        parent::__destruct(); // Call the parent destructor
        echo "Dog destructor called
";
    }
}

$dog = new Dog("Fido", "Golden Retriever");

// Output:
// Animal constructor called
// Dog constructor called
unset($dog);

// Output:
// Dog destructor called
// Animal destructor called

在上面的示例中,当Dog对象被创建时,它的构造方法会自动调用父类Animal类的构造方法。当Dog对象被销毁时,它的析构方法会自动调用父类Animal类的析构方法。

2. 多态机制

多态机制允许子类重写父类的方法,从而拥有不同的行为。多态特性是通过方法重写(method overriding)来实现的。例如:

class Animal {
    public function speak() {
        echo "I am an animal.
";
    }
}

class Dog extends Animal {
    @Override
    public function speak() {
        echo "Woof!
";
    }
}

class Cat extends Animal {
    @Override
    public function speak() {
        echo "Meow!
";
    }
}

$animals = [new Dog(), new Cat()];

foreach ($animals as $animal) {
    $animal->speak();
}

// Output:
// Woof!
// Meow!

在上面的示例中,Dog类和Cat类都继承了Animal类的speak方法。但是,Dog类和Cat类分别重写了speak方法,从而拥有了自己的行为。因此,当调用speak方法时,不同的子类对象会发出不同的声音。

多态机制允许您编写通用代码,而无需考虑具体的子类。例如,您可以编写一个speak()方法,该方法可以被任何动物类对象调用,而无需知道该动物的具体类型。

总结

继承与多态是面向对象编程的核心特性。继承允许对象获取其他对象的属性和方法,多态允许子类重写父类的方法。掌握继承与多态机制可以帮助您编写出更加灵活和可维护的代码。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯