PHP类(四)-类的继承
类的继承就是从已经定义的类中继承数据,也可以重新定义或者加入一些数据。
被继承的类称为父类,基类,超类
继承的类称为子类,派生类
在PHP中只能使用单继承,也就是一个类只能从一个类中继承数据,但是一个类可以有多个子类
<?php
class Person{
var $name;
var $age;
var $sex; function __construct($name="Alex",$age=12,$sex="Male"){
$this->name = $name;
$this->age = $age;
$this->sex = $sex;
} function Say(){
echo "My name is ".$this->name.",and my age is ".$this->age.",sex is ".$this->sex;
echo "<br>";
}
} class Student extends Person{
var $grade; function Study(){
echo $this->name." is study in grade ".$this->grade.".And My age is ".$this->age;
echo "<br>";
}
} class Teacher extends Person{
var $subject; function Teach(){
echo $this->name." teaches ".$this->subject;
echo "<br>";
}
} $p1 = new Student("John",16,"Male");
$p1->Say();
$p1->grade = 8;
$p1->Study(); $p2 = new Teacher("Tom",23,"Male");
$p2->Say();
$p2->subject = "PHP";
$p2->Teach();
?>
运行结果

子类重载父类
在PHP中不能定义重名的函数,也不能在类中定义重名的方法,但在子类中可以定义和父类同名的方法
父类中的一些方法不适用于子类,子类可以重载父类的方法
在子类重载父类的方法时,在子类中重载的方法的访问权限一定要不能低于父类被覆盖方法的访问权限
<?php
class Person{
var $name;
var $age;
var $sex; function __construct($name="Alex",$age=12,$sex="Male"){
$this->name = $name;
$this->age = $age;
$this->sex = $sex;
} function Say(){
echo "My name is ".$this->name.",and my age is ".$this->age.",sex is ".$this->sex;
echo "<br>";
}
} class Student extends Person{
var $grade; //覆盖父类中的构造方法,并多添加一个成员属性,用来创建对象并初始化成员属性
function __construct($name="Alex",$age=12,$sex="Male",$grade="Eight"){
parent::__construct($name,$age,$sex); //调用父类中原本被覆盖的构造方法,为从父类继承过来的属性赋初值
$this->grade = $grade;
} function Say(){
parent::Say(); //调用父类中被覆盖的Say()方法
echo $this->name." is study in grade ".$this->grade.".And my age is ".$this->age;
echo "<br>";
}
} $p1 = new Student("John",16,"Male");
$p1->grade = 8;
$p1->Say();
?>
运行结果

类的继承的访问控制
访问控制有三种,public,private,protected
public为公有权限
private为私有权限,父类中设置为private权限,父类的外部和子类都不能访问
protected为保护权限,父类中设置为protected权限,父类的外部和子类的外部都不能访问,但是子类能访问的
<?php
class Person{
protected $name = "Tom"; protected function Say(){
echo "My name is ".$this->name;
}
} class Man extends Person{
function Speak(){
echo $this->name." can speak Chinese";
}
} $p1 = new Man();
$p1->Speak();
$p1->Say(); //在子类外部调用父类中受保护的方法
?>
运行结果

PHP类(四)-类的继承的更多相关文章
- python3 入门 (四) 类与继承
Python 类 Python中的类提供了面向对象编程的所有基本功能:类的继承机制允许多个基类,派生类可以覆盖基类中的任何方法,方法中可以调用基类中的同名方法. 对象可以包含任意数量和类型的数据. p ...
- Kotlin——从无到有系列之中级篇(四):面向对象的特征与类(class)继承详解
如果您对Kotlin很有兴趣,或者很想学好这门语言,可以关注我的掘金,或者进入我的QQ群大家一起学习.进步. 欢迎各位大佬进群共同研究.探索 QQ群号:497071402 进入正题 在前面的章节中,详 ...
- 四. Java继承和多态9. 类与类之间的关系
类与类之间最常见的关系主要有三种:依赖(uses-a).聚合(has-a)和继承(is-a). 下面以在线书店订单系统为例,来详细的讲述这三种关系的概念. 在线书店订单系统的主要功能是:注册用户可以登 ...
- Java—类的封装、继承与多态
一.类和对象 1.类 类是数据以及对数据的一组操作的封装体. 类声明的格式: 类声明 { 成员变量的声明: 成员方法的声明及实现: } 1.1 声明类 [修饰符] class 类<泛型> ...
- 黑马程序员——【Java基础】——面向对象(一)概述、类与对象、继承、抽象类、接口、多态、内部类
---------- android培训.java培训.期待与您交流! ---------- 一.面向对象概述 1.面向对象:是一个很抽象的概念,它相对面向过程而言,是一种程序设计的思想. 2.面向对 ...
- 重新开始学习javase_类再生(类的合成和继承)
一.合成在新类里简单地创建原有类的对象.我们把这种方法叫作“合成” 为进行合成,我们只需在新类里简单地置入对象句柄即可.举个例子来说,假定需要在一个对象里容纳几个 String对象.两种基本数据类型以 ...
- IT第十八天 - 类的封装、继承、重载、上周总结★★★
IT第十八天 上午 封装 1.关键字this,是表示该类在实例化时的对象,即this.表示为该对象的属性 2.类的数据保护,set.get方法的写法规则,为了之后的反射机制的读取数据,set方法中对于 ...
- python开发面向对象基础:接口类&抽象类&多态&钻石继承
一,接口类 继承有两种用途: 一:继承基类的方法,并且做出自己的改变或者扩展(代码重用) 二:声明某个子类兼容于某基类,定义一个接口类Interface,接口类中定义了一些接口名(就是函数名)且并未实 ...
- [C++]变量存储类别,指针和引用,类与对象,继承与派生的一些摘要
C++中共有四种存储类别标识符:auto/static/register/extern 1.auto 函数或分程序内定义的变量(包括形参)可以定义为auto(自动变量).如果不指定存储类别,则隐式定义 ...
随机推荐
- Python日期时间函数
所有日期.时间的api都在datetime模块内. 1. 日期输出格式化 datetime => string import datetime now = datetime.datetime.n ...
- MapReduce-计数器
计数器 计数器是收集作业统计信息的有效手段之一,用于质量控制或应用级统计.计数器还可辅助诊断系统故障.根据计数器值来记录某一特定事件的发生比分析一堆日志文件容易得多.内置计数器Hadoop为每个作业维 ...
- C# 反射通过GetCustomAttributes方法,获得自定义特性
http://blog.csdn.net/litao2/article/details/17633107 使用反射访问: 自定义属性的信息和对其进行操作的方法. 一.实例1 1.代码: 如:Syste ...
- Linux嵌入式 -- 内核 (arm) & 文件系统
1. make distclean 2. 配置内核 ----> 生成 .config文件 make menuconfig ARCH=arm Makefile文件分析: 3. 编译内核 mak ...
- dr01_SetColor
1. TGraphicUnit.SetColor 2. 3.
- 0.00-050613_ZC_Chapter4_20151230
1. 32位 保护模式 段选择符 --> 段描述符(段描述符表) --> 段基地址 + 偏移量 ==> 线性地址(ZC: 这个地址就是段的开始地址) 1.2. 段限长字段LIMIT ...
- 【C#】62. 异步读写文件的几种方法: Task.Factory.FromAsync,WriteAsync
一.这里主要说明2种异步写入文件的方法: 1)异步编程模型API转为Task——使用Task.Factory.FromAsync方法 2)对于StreamWriter使用WriteAsync方法 请记 ...
- 26 python 并发编程之多进程理论
一 什么是进程 进程:正在进行的一个过程或者说一个任务.而负责执行任务则是cpu. 举例(单核+多道,实现多个进程的并发执行): egon在一个时间段内有很多任务要做:python备课的任务,写书的任 ...
- 剑指offer--16.数组中重复的数字
时间限制:1秒 空间限制:32768K 热度指数:198342 本题知识点: 数组 题目描述 在一个长度为n的数组里的所有数字都在0到n-1的范围内. 数组中某些数字是重复的,但不知道有几个数字是重复 ...
- C++中头文件、源文件之间的区别与联系
.h头文件和.cpp文件的区别 疑惑1:.h文件能够编写main函数吗? 实验: 编写test.h文件,里面包含main函数 若直接编译g++ test.h -o test,通过file命令 file ...