类的继承就是从已经定义的类中继承数据,也可以重新定义或者加入一些数据。

被继承的类称为父类,基类,超类

继承的类称为子类,派生类

在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类(四)-类的继承的更多相关文章

  1. python3 入门 (四) 类与继承

    Python 类 Python中的类提供了面向对象编程的所有基本功能:类的继承机制允许多个基类,派生类可以覆盖基类中的任何方法,方法中可以调用基类中的同名方法. 对象可以包含任意数量和类型的数据. p ...

  2. Kotlin——从无到有系列之中级篇(四):面向对象的特征与类(class)继承详解

    如果您对Kotlin很有兴趣,或者很想学好这门语言,可以关注我的掘金,或者进入我的QQ群大家一起学习.进步. 欢迎各位大佬进群共同研究.探索 QQ群号:497071402 进入正题 在前面的章节中,详 ...

  3. 四. Java继承和多态9. 类与类之间的关系

    类与类之间最常见的关系主要有三种:依赖(uses-a).聚合(has-a)和继承(is-a). 下面以在线书店订单系统为例,来详细的讲述这三种关系的概念. 在线书店订单系统的主要功能是:注册用户可以登 ...

  4. Java—类的封装、继承与多态

    一.类和对象 1.类 类是数据以及对数据的一组操作的封装体. 类声明的格式: 类声明 { 成员变量的声明: 成员方法的声明及实现: } 1.1 声明类 [修饰符] class 类<泛型> ...

  5. 黑马程序员——【Java基础】——面向对象(一)概述、类与对象、继承、抽象类、接口、多态、内部类

    ---------- android培训.java培训.期待与您交流! ---------- 一.面向对象概述 1.面向对象:是一个很抽象的概念,它相对面向过程而言,是一种程序设计的思想. 2.面向对 ...

  6. 重新开始学习javase_类再生(类的合成和继承)

    一.合成在新类里简单地创建原有类的对象.我们把这种方法叫作“合成” 为进行合成,我们只需在新类里简单地置入对象句柄即可.举个例子来说,假定需要在一个对象里容纳几个 String对象.两种基本数据类型以 ...

  7. IT第十八天 - 类的封装、继承、重载、上周总结★★★

    IT第十八天 上午 封装 1.关键字this,是表示该类在实例化时的对象,即this.表示为该对象的属性 2.类的数据保护,set.get方法的写法规则,为了之后的反射机制的读取数据,set方法中对于 ...

  8. python开发面向对象基础:接口类&抽象类&多态&钻石继承

    一,接口类 继承有两种用途: 一:继承基类的方法,并且做出自己的改变或者扩展(代码重用) 二:声明某个子类兼容于某基类,定义一个接口类Interface,接口类中定义了一些接口名(就是函数名)且并未实 ...

  9. [C++]变量存储类别,指针和引用,类与对象,继承与派生的一些摘要

    C++中共有四种存储类别标识符:auto/static/register/extern 1.auto 函数或分程序内定义的变量(包括形参)可以定义为auto(自动变量).如果不指定存储类别,则隐式定义 ...

随机推荐

  1. POJ 1635 Subway tree systems (树的最小表示法)

    题意:一串01序列,从一个点开始,0表示去下一个点,1表示回到上一个点,最后回到起点,遍历这棵树时每条边当且仅当走2次(来回) 给出两串序列,判断是否是同一棵树的不同遍历方式 题解:我们把每一个节点下 ...

  2. Ubuntu 没有mkinitrd 解决方法

    1. 先apt-get install  先装cramfsprogs 2. http://archive.debian.net/zh-cn/sarge/initrd-tools 下载initrd-to ...

  3. STL视频_02

    [01:05]主要讲一下几个要点: 1.模板.函数模板 类模板 以及它们的用法 2.容器.什么是容器 和 容器的分类,各种容器的数据结构 3.容器vector的具体用法,包括迭代器的具体用法 [01: ...

  4. JavaScrip 原生多文件上传及预览 兼容多浏览器

    JavaScrip 原生多文件上传及预览 兼容多浏览器 html代码块 <div class="container"> <label>请选择一个图像文件:& ...

  5. review14

    日期的格式化 Formatter类的format方法: format(格式化模式, 日期列表) 按着“格式化模式”返回“日期列表”中所列各个日期中所含数据(年,月,日,小时等数据)的字符串表示.“格式 ...

  6. Spinner使用二

    Spinner使用二 一.效果图 二.方法及核心函数 三.代码 后面补

  7. Java 反射机制应用实践

    反射基础 p.s: 本文需要读者对反射机制的API有一定程度的了解,如果之前没有接触过的话,建议先看一下官方文档的Quick Start(https://docs.oracle.com/javase/ ...

  8. AI探索(一)基础知识储备

    AI的定义 凡是通过机器学习,实现机器替代人力的技术,就是AI.机器学习是什么呢?机器学习是由AI科学家研发的算法模型,通过数据灌输,学习数据中的规律并总结,即模型内自动生成能表达(输入.输出)数据之 ...

  9. 在Java中定义常量

    方法一采用接口(Interface)的中变量默认为static final的特性. 方法二采用了Java 5.0中引入的Enum类型. 方法三采用了在普通类中使用static final修饰变量的方法 ...

  10. PHP中不用第三个变量交换两个变量的值

    相信大家在PHP面试或者学习中经常会遇到这个问题就是“不用第三个变量来交换两个变量的值”,今天正对这个问题来讨论一下: 第一种方法:首先会想到的 这种方法简单可行,顺利的交换了两个变量的值. 第二种方 ...