1、继承的三大功能
1.1、继承
- 继承需要使用关键字
extends
注意
- 继承时子类不能访问父类的私有属性
代码示例
<?php
class User{
public $name = "小明";
public $age = "35";
public $email = "123@qq.com";
public function one(){
return "姓名:$this->name<br>年龄:$this->age<br>";
}
public function two(){
return "$this->name". "的邮箱:". $this->email."<br>";
}
}
$user = New User();
echo $user->one();
echo $user->two();
echo "<hr>";
//继承
class Infor extends User{
}
$infor = New Infor();
echo $infor->name ."今年".$infor->age."<br>";
echo $infor->name ."的邮箱是".$infor->email."<br>";
echo $infor->two();
?>
1.2、重写
<?php
class User{
public $name = "小明";
public $age = "35";
private $email = "123@qq.com";
public function one(){
return "姓名:$this->name<br>年龄:$this->age<br>";
}
public function two(){
return "$this->name". "的邮箱:". $this->email."<br>";
}
}
$user = New User();
echo $user->one();
echo $user->two();
echo "<hr>";
//继承
class Infor extends User{
//属性重写
public $age = "23";
//方法重写
public function one(){
return parent::one()."我还很年轻噢";
}
}
$infor = New Infor();
echo $infor->name ."今年".$infor->age."<br>";
echo $infor->name ."的邮箱是".$infor->email."<br>";
echo $infor->one();
?>
1.2、扩展
- 扩展子类的方法来扩展父类
代码示例
<?php
class User{
public $name = "小明";
public $age = "35";
private $email = "123@qq.com";
public function one(){
return "姓名:$this->name<br>年龄:$this->age<br>";
}
public function two(){
return "$this->name". "的邮箱:". $this->email."<br>";
}
}
$user = New User();
echo $user->one();
echo $user->two();
echo "<hr>";
//继承
class Infor extends User{
//属性扩展
public $like ="打篮球,踢足球";
//重写
public function one(){
return parent::one()."我还很年轻噢";
}
//方法扩展
public function three(){
return "姓名:$this->name<br>年龄:$this->age<br>爱好:$this->like";
}
}
$infor = New Infor();
echo $infor->name ."今年".$infor->age."<br>";
echo $infor->name ."的邮箱是".$infor->email."<br>";
echo $infor->one();
echo $infor->three();
?>
2、抽象类
定义为抽象的类不能被实例化
任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的
被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实现
继承一个抽象类的时候,子类必须定义父类中的所有抽象方法
代码示例
<?php
//抽象类
abstract class User{
protected $name = "小明";
public $age = "35";
protected $email = "123@qq.com";
protected function one(){
return "姓名:$this->name<br>年龄:$this->age<br>";
}
//抽象方法
abstract protected function two();
}
abstract class Infor extends User{
protected $school="清华大学";
protected function two(){
return "姓名:$this->name<br>年龄:$this->age<br>就读于:$this->school";
}
}
//最终实现类
class Inf extends Infor{
public function two(){
return parent::two();
}
}
$infor = New Inf();
echo $infor->two();
?>
3、接口
使用接口(interface),可以指定某个类必须实现哪些方法,但不需要定义这些方法的具体内容
接口是通过 interface 关键字来定义的,就像定义一个标准的类一样,但其中定义所有的方法都是空的
接口中定义的所有方法都必须是公有,这是接口的特性
要实现一个接口,使用 implements 操作符
类中必须实现接口中定义的所有方法,否则会报一个致命错误
- 类可以实现多个接口,用逗号来分隔多个接口的名称
注意
<?php
//抽象类
interface iUser{
//接口常量
const school="清华大学";
//接口方法
public static function two();
}
//实现接口
class Infor implements iUser{
protected static $name="翠花";
public static function two(){
return self::$name."就读与".iUser::school;
}
}
echo Infor::two();
?>
4、学习总结
本节课学习了继承的三大功能、抽象类、接口的知识。这些知识只是听说过,也不知道他们的使用方法。通过本节课的学习大体知道他们具体的知识点,知道如何去使用他们。需要在以后的学习和实践中强化他们,灵活应运。