前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PHP面向对象4 继承(系列篇)

PHP面向对象4 继承(系列篇)

作者头像
贵哥的编程之路
发布2022-03-25 20:25:49
2190
发布2022-03-25 20:25:49
举报
文章被收录于专栏:用户7873631的专栏

继承的意义在于,我拥有你的,我还可以定义自己的

代码语言:javascript
复制
<?php
header('Content-Type:text/html;charset=utf-8');
class Humanity {
	public $name;
	public $sex;
	public $iq=10;
	const BIRTHPLACE='地球';
	//构造函数
	public function __construct($name,$sex){
		$this->name=$name;
		$this->sex=$sex;
	}
	public function eat($food){
		echo "<p>{$this->name}正在吃{$food}!</p>";
	}
}
class Student extends Humanity {
	public $studentId;
	public function test($subject){
		echo "<p>{$this->name}正在考{$subject}!</p>";
	}
}
class Worker extends Humanity {
	
}
class ClassLeader extends Student {
	public function manage($arg){
		echo "{$this->name}:{$arg}";
	}
}
$hanMM=new Student('韩梅梅','女');
$hanMM->eat('苹果');
$hanMM->test('数学');
$xiaoXin=new Worker('蜡笔小新','男');
$xiaoXin->eat('青椒');
$liLei=new ClassLeader('李雷','男');
$liLei->eat('香蕉');
$liLei->manage('你们上课不要乱说话,不要影响其他同学!');

解析:

代码语言:javascript
复制
//继承
1:我们在定义某个类的时候,可以指定这个类 根据 程序中已经存在的 某个类 派生而来!
2:Student类继承了Humanity这个类
3:Student称作是Humanity的子类,Humanity是Student的父类
4:子类继承了父类的属性(变量)和方法,就相当于,子类中有和父类一样的属性以及方法,就像是子类自己的一样!
5:子类可以再去定义属于自己的属性以及方法,类常量
在这里插入图片描述
在这里插入图片描述

重写:

代码语言:javascript
复制
<?php
header('Content-Type:text/html;charset=utf-8');
class Humanity {
	public $name;
	public $sex;
	public $iq=10;
	const BIRTHPLACE='地球';
	//构造函数
	public function __construct($name,$sex){
		$this->name=$name;
		$this->sex=$sex;
	}
	public function eat($food){
		echo "<p>{$this->name}正在吃{$food}!</p>";
	}
}
class Student extends Humanity {
	public $studentId;
	public function test($subject){
		echo "<p>{$this->name}正在考{$subject}!</p>";
	}
	//方法重写,相当于在当前这个子类里面覆盖了父类的某个方法!
	//参数的个数要和父类一致,构造函数的参数个数无需和父类里面的构造函数的参数个数一致
	
	public function eat($food){
		echo "<p>{$this->name}正在快速的吃{$food}!</p>";
	}
}
class Worker extends Humanity {
	
}

$hanMM=new Student('韩梅梅','女');
$hanMM->eat('苹果');

$xiaoXin=new Worker('蜡笔小新','男');
//对其他的子类没有影响
$xiaoXin->eat('青椒');

解析: 重写的核心在于,我可以在你的基础上,改成我的。比如我喜欢吃青椒不喜欢吃苹果

在这里插入图片描述
在这里插入图片描述

final(不想被重写的解决方案):

代码语言:javascript
复制
<?php
header('Content-Type:text/html;charset=utf-8');
class Humanity {
	public $name;
	public $sex;
	public $iq=10;
	const BIRTHPLACE='地球';
	//构造函数
	public function __construct($name,$sex){
		$this->name=$name;
		$this->sex=$sex;
	}
	//方法的前面加上final,这个方法就不能被子类 重写(覆盖)
	final public function eat($food){
		echo "<p>{$this->name}正在吃{$food}!</p>";
	}
}
class Student extends Humanity {
	public $studentId;
	public function test($subject){
		echo "<p>{$this->name}正在考{$subject}!</p>";
	}
	//方法重写,相当于在当前这个子类里面覆盖了父类的某个方法!
	//参数的个数要和父类一致,构造函数的参数个数无需和父类里面的构造函数的参数个数一致
	//父类中被覆盖了的方法不会在执行
	//如果你真的希望在子类里面访问被当前类覆盖了的父类中的方法怎么办呢?
	public function eat($food){
		echo "<p>{$this->name}正在快速的吃{$food}!</p>";
	}
}
class Worker extends Humanity {
	
}

$hanMM=new Student('韩梅梅','女');
$hanMM->eat('苹果');

$xiaoXin=new Worker('蜡笔小新','男');
//对其他的子类没有影响
$xiaoXin->eat('青椒');

解析: 被final修饰的,被子类重写了报错了·

在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022/01/30 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 重写:
  • final(不想被重写的解决方案):
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档