PHP类的继承性 扩展性 extends 重载 覆盖

猫斯基  — PHP


子类使用extends继承父类,子类可以将父类中所有的内容都继承过来。

private是私有的,只能自己用,不能别人用,包括自己的子类也不能用。

protected是保护权限,只能自己和自己的子类使用。

pubic是公开权限,自己、子类、内部、外部都可使用。

/**
 * @url https://maosiji.com
ds
 */
class Person {
	public $name;
	protected $age;
	private $sex;
	private $school;
	
	function __construct( $name, $age, $sex ) {
		$this->name = $name;
		$this->age = $age;
		$this->sex = $sex;
	}
	public function say() { echo "我的名字是:{$this->name},年龄是:{$this->age},性别是:{$this->sex}。<br>";}
	public function eat() { echo 'eating';}
	public function run() {}
	public function learn() {}
	
}
class Student extends Person {
	
	
	
}
class Teacher extends Student {
	// 工资
	public $workprice;
	// 讲课
	public function lecture(){ echo "我的名字是:{$this->name},年龄是:{$this->age},性别是:{$this->sex}。<br>";}
}

$s = new Teacher('Nox', 32, '女');
$s->say();
$s->lecture();

/*
打印结果:
我的名字是:Nox,年龄是:32,性别是:女。
我的名字是:Nox,年龄是:32,性别是:。
*/

重载、覆盖

在子类中可以写与父类同名的方法。

使用Parent::调用父类的方法。

只要是子类的构造方法,去覆盖父类的构造方法,一定要在子类构造方法内的最上面调用一下父类被覆盖的方法。

权限问题:子类的属性和方法的权限只能大于或等于父类的属性和方法的权限。

/**
 * @url https://maosiji.com
ds
 */
class Person {
	protected $name;
	protected $age;
	protected $sex;
	
	function __construct( $name, $age, $sex ) {
		$this->name = $name;
		$this->age = $age;
		$this->sex = $sex;
	}
	public function say() { echo "我的名字是:{$this->name},年龄是:{$this->age},性别是:{$this->sex}。<br>";}
	public function eat() { echo 'eating';}
	public function run() {}
	public function learn() {}
	
}
class Student extends Person {
	
	protected $school;
	
	function __construct( $name, $age, $sex, $school ) {
		
		parent::__construct( $name, $age, $sex);
		
		$this->school = $school;
	}
	
	public function say() {
		// Person::say();
		Parent::say();
		echo "我就读于{$this->school}。<br>";
	}
	
}
class Teacher extends Student {
	// 工资
	public $workprice;
	// 讲课
	public function lecture(){ echo "我的名字是:{$this->name},年龄是:{$this->age},性别是:{$this->sex}。<br>";}
}

$s = new Teacher('Nox', 32, '女', 'X大学');
$s->say();

/*
打印结果:
我的名字是:Nox,年龄是:32,性别是:女。
我就读于X大学。
*/

阅读量:0 2021-01-23 14:11

返回顶部