php 面向对象三大特点:封装继承多态

Posted 狂奔的小马扎

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php 面向对象三大特点:封装继承多态相关的知识,希望对你有一定的参考价值。

在讲解这三大特性前,我们先讲访问修饰符。

php中有3中访问修饰符:public protected private;

public:表示公有的;可在本类、子类、对象实例中访问。

protected:表示受保护的;可在本类、子类中访问;不能在对象实例中访问。

private:表示私有的;可在本类中访问;不能在子类、对象实例中访问。

 

一、封装性

封装就是把抽取出来的数据和对数据的操作封装在一起,数据被保护在内部,程序的其他部分只有被授权的操作(方法)才能对数据进行操作。

class Student{
    public $name;
    protected $age;
    private $play;
    public function __construct($name, $age){
        echo 我是Student类;
        $this->name = $name;
        $this->age = $age;
    }
}

$student = new Student(moon, 18);

 

二、继承性

当多个类有很多共同属性和方法时,代码冗余;这时,我们可以将共有部分提取出来,封装成一个类;子类经过一些操作可以使用这个共有的父类,这个就叫继承。

语法结构: 

class 父类名{} 

class 子类名 extends 父类名{}

继承要素:

  • 一个子类只能继承一个父类(这里指直接继承);如果希望继承多个类的属性和方法,可以使用多层继承
  • 在创建某个子类实例时,默认情况下不会自动调用其父类的构造函数;可以使用 父类::__construct() 或者 parent::__construct() 来完成
  • 如果子类和父类的方法名相同(public,protected),我们称为方法覆盖或方法重写(override),看下面的多态性 
class Student{
    public $name;
    protected $age;
    private $play;
    public function __construct($name, $age){
        echo 我是Student类;
        $this->name = $name;
        $this->age = $age;
    }
}

// Pupil类继承Student类
class Pupil extends Student {
    public function testing(){
        echo 我是Pupil;
    }
    public function __construct($name, $age){
        parent::__construct($name, $age);   // 调用父类的构造方法1
        // Student::__construct($name, $age);   // 调用父类的构造方法2
        echo $this->name;
        echo $this->age;
        // echo $this->play;    // 报错,父类private定义的属性不能被子类继承
    }
}

new Pupil(sky, 18);


// 实现类的多层继承
class A{
    public $name=AAA;
}
class B extends A{
    public $age=30;
}
class C extends B{}
$p = new C();
echo $p->name; // 这里会输出AAA 

 

以上是关于php 面向对象三大特点:封装继承多态的主要内容,如果未能解决你的问题,请参考以下文章

php 面向对象三大特点:封装继承多态

PHP面向对象的三大特征操作——封装继承多态(下)

面向对象编程三大特性-封装、继承、多态

谈面向对象的三大特征

Python面向对象的三大特点:封装,继承和多态

java面向对象的三大特征?