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(自动变量).如果不指定存储类别,则隐式定义 ...
随机推荐
- 增强织梦DedeCMS“更新系统缓存”清理沉余缓存的功能
我们使用织梦DedeCMS系统有很长一段时间后,不间断的在后台更新系统缓存的时候,有些缓存文件夹及缓存文件没有被清理,导致日积月累的垃圾缓存文件越来越多,可以以百千万计算,现在增强更新系统缓存功能清理 ...
- codevs 2800 送外卖 TSP问题
2800 送外卖 时间限制: 2 s 空间限制: 256000 KB 题目等级 : 钻石 Diamond 题目描述 Description 有一个送外卖的,他手上有n份订单,他要把n份 ...
- 0.00-050613_boot.s
! boot.s ! ! It then loads the system at 0x10000, using BIOS interrupts. Thereafter ! it disables al ...
- review29
数组流 流的源和目的地除了可以是文件外,还可以是计算机内存. 1.字节数组流 字节数组输入流ByteArrayInputStream和字节数组输出流ByteArrayOutputStream分别使用字 ...
- PyCharm 的初始设置2 - 打开、新建项目
03. 新建/打开一个 Python 项目 3.1 项目简介 开发 项目 就是开发一个 专门解决一个复杂业务功能的软件 通常每 一个项目 就具有一个 独立专属的目录,用于保存 所有和项目相关的文件 – ...
- 14 Python 装饰器
装饰器 装饰器其实就是一个以函数作为参数并返回一个替换函数的可执行函数.让我们从简单的开始,直到能写出实用的装饰器. def outer(some_func): def inner(): print ...
- C/C++ 字符串与数字相互转换
一.利用stringstream类 1. 字符串到整数 stringstream sstr(str); int x; sstr >> x;(即从sstr中提取数据) ...
- php程序员应该掌握的技能包
作为一名web开发者来说,不论是php还是java web,就我目前掌握的知识来说,个人认为应该掌握以下几个方面的内容 1 基础的编程语言,这个好像是废话 2 软件设计的思想,如面向对象.mvc.各种 ...
- 简单常用sql查询
[self.db executeUpdate:sql, record.recordID]; CREATE TABLE scene_record(id TEXT PRIMARY KEY, record_ ...
- Codeforces Round #260(div2)C(递推)
有明显的递推关系: f[i]表示i为数列中最大值时所求结果.num[i]表示数i在数列中出现了几次. 对于数i,要么删i,要么删i-1,只有这两种情况,且子问题还是一样的思路.那么很显然递推一下就行了 ...