PHP学习——23 PHP面向对象(类的继承与多态:extends与方法重写)

版权声明:本文为博主原创文章,仅供学习交流,未经博主允许不得转载。 https://blog.csdn.net/zjy_android_blog/article/details/83421538

首先介绍几个概念:
1. 范围解析操作符 (::)或者更简单地说是一对冒号,可以用于访问静态成员,类常量,还可以用于覆盖类中的属性和方法。
2. 继承:当扩展一个类,子类就会继承父类所有公有的和受保护的方法。除非子类覆盖了父类的方法,被继承的方法都会保留其原有功能。
3. 多态的应用:父类对象的引用指向子类对象,其实本质上就是一个向上转型。

例子:老板(boss 对象)对员工说都回去工作(调用函数sayGotoDo函数),这是所有的员工(会计员、程序员、行政人员)都会响应该函数事件,去工作(执行子类的工作事件,doCaculate、doProgram、doWork...),但是每个工作事件都不一样,这就是多态,父类的函数执行具体到子类执行时,是不尽相同的。

<?php 
class Person
{
	protected $name;//protected:受保护的,外部不可见,只允许内部和子类访问
	protected $age;
	protected $salary;

	public function __construct($name,$age,$salary){
		$this->name = $name;
		$this->age = $age;
		$this->salary = $salary;
	}

	// public function getMsg(){
	protected function getMsg(){ // 声明为protected,这样就只能被子类继承,子类继承后还是protected
		return '我的名字是:'.$this->name.',年龄是:'.$this->age.',薪资是:'.$this->salary;
	}
}
// $person = new Person('Peter',33,4000);
// echo $person->getMsg().'<br>';
// 我的名字是:Peter,年龄是:33,薪资是:4000

// 声明一个子类(扩展类),继承使用关键字extends,php是单继承语言
// 创建子类是为了扩展父类的功能,实现代码的复用
class Employee extends Person
{
	protected $department;// 部门
	public function __construct($name,$age,$salary,$department){
		parent::__construct($name,$age,$salary);
		// $this->name = $name;
		// $this->age = $age;
		// $this->salary = $salary;
		$this->department = $department;
	}
	// 重写getMsg方法,在子类中重写父类方法,其访问权限不能低于原来的,原来是protected,那么现在应该是public
	public function getMsg(){
	// protected function getMsg(){ // 声明为protected,这样就只能被子类继承,子类继承后还是protected
		// return '我的名字是:'.$this->name.',年龄是:'.$this->age.',薪资是:'.$this->salary.',部门是:'.$this->department;
		return parent::getMsg().',部门是:'.$this->department;
	}
}

$person = new Employee('Charry',53,30000,'开发部');
echo $person->getMsg().'<br>';
// 我的名字是:Charry,年龄是:23,薪资是:30000,部门是:开发部

?>

猜你喜欢

转载自blog.csdn.net/zjy_android_blog/article/details/83421538