抽象类简介
abstract:定义抽象方法/抽象类
类中只要有一个抽象方法,该类就应该声明为抽象类
抽象类只能被继承,不能实例化,并且抽象方法必须在子类实现
实现抽象方法的子类方法可见性不能低于抽象方法原定义
抽象方法是public,子类方法只能是public
抽象方法是protected,子类方法只能是protected/public
一个抽象类必须被扩展为一个特定的类,我们才能创造类实例,使用类中功能
抽象类
<?php
namespace _demo;
//传统类
class Person1
{
protected $name;
// 构造方法
public function __construct($name='小明')
{
$this->name = $name;
}
// 获取器
public function getName()
{
return $this->name;
}
// 设置器
public function setName($value)
{
$this->name = $value;
}
}
//实例化
$person = new Person1();
echo '我的姓名是:' . $person->getName(),'<br>';
$person->setName('小李');
echo '我的姓名是:' . $person->getName(),'<br>';
echo '<hr>';
//创建出一个抽象类
//1。里面有一些不确定的方法和实现过程,不能实例化,不能new
//2。类中的抽象方法,必须在子类中全部实现
abstract class Person2
{
protected $name;
public function __construct($name='小王')
{
$this->name = $name;
}
public function getName()
{
return $this->name;
}
// 这个方法没有实现的过程,变成一个抽象方法
abstract public function setName($value);
}
//子类来扩展/实现一个抽象类
class Sub extends Person2
{
// 构造方法不会自动继承,所以呢我们要引入下父类的构造方法
public function __construct($name = '小王')
{
parent::__construct($name);
}
//在子类中将抽象类中的一个抽象方法setName()具体实现一下
public function setName($value)
{
$this->name = $value;
}
}
$sub = new Sub('帅哥');
echo '我是:'.$sub->getName() ,'<br>';
$sub->setName('大帅哥');
echo '我是:'.$sub->getName(),'<br>';
完事…