A类具有某些特征,B类具有A类的所有特征,同时还有自己独特的特征,此时我们就要用的继承.
几个概念
- 继承:一个类从另一个以后的类获得其特性,称为继承
- 派生:从一个已有的类产生一个新的类,称为派生
上述继承和派生只是在 - 单继承:一个类只能从一个上级类继承其特性信息。PHP不能多继承
- 扩展:在子类中在定义自己的一些新的特有的特性信息,如果不能扩展,继承就变得没有意义
访问(权限)修饰符
public:可以在任何环境下访问
protected:只能在该类或者子类中使用
private:只能在该类中使用
<?php
class jizhuidongwu{
public $prop1 = "有脊椎";
function show1(){
echo "<br/ >父类说特征:".$this->prop1;
}
function construct($p){
$this->$prop1 = $p;
}
}
class human extends jizhuidongwu{
public $prop2 = "两脚走路";
function show2(){
//子类调用父类的方法
parent::show1();
echo "<br/> 子类说特征:".$this->prop1;
echo "<br/> 子类说特征:".$this->prop2;
}
function construct($p1,$p2){
parent::__construct($p1);
$this->$prop2 = $p2;
}
}
$p = new human("我是父类","我是子类");
$p -> show2();
?>
有构造方法子类继承有构造方法父类写法
写法1:重写父类构造方法,不再调用父类构造方法
<?php
class C{
public $p1 = 1;
function __construct($p1){
$this -> p1 = $p1;
echo "<br/>父类构造方法";
}
}
class D extends C{
public $p2 = 2;
function __construct($p1,$p2){
$this->p1 = $p1;
$this->p2 = $p2;
echo "<br/>子类构造方法";
}
}
$d1 = new D(20,30);
?>
输出结果:子类构造方法
写法2:传值到父类的构造方法,会调用父类构造方法
<?php
class C{
public $p1 = 1;
function __construct($p1){
$this -> p1 = $p1;
echo "<br/>父类构造方法";
}
}
class D extends C{
public $p2 = 2;
function __construct($p1,$p2){
parent::__construct($p1);
$this->p2 = $p2;
echo "<br/>子类构造方法";
}
}
$d1 = new D(20,30);
?>
输出结果:
子类构造方法
父类构造方法
重写
从父类继承下来的属性或方法重新"定义"。
-
访问控制权限
父类public 子类只能public ,父类protected 子类可以public,也可以protected,子类只能和父类的全向相同,或者比父类更加"开放"。父类中的private,子类无法获取,无从谈起继承。 -
参数形式
父类方法如果有参数,子类若想覆盖父类方法,必须也带有参数,数量也必须一样。构造方法比较特殊,子类参数只能和父类相同或者比父类多。
最终类final class
一个类没有特殊声明,就可被别的类继承,但是如果声明为最终类,则不能被继承
final class 类名{
//code
}
最终方法finalmethod
一个方法没有特殊声明,则下级类可以对其进行重写,但是如果声明为最终方法,则不能被重写
final function 方法名(){
//code
}
网友评论