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

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

<?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('你们上课不要乱说话,不要影响其他同学!');

解析:

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

在这里插入图片描述

重写:

<?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(不想被重写的解决方案):

<?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修饰的,被子类重写了报错了·

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贵哥的编程之路(热爱分享)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值