我们称以存在的用来派生新类的类为基类,又称做父类,超类。由已存在的类派生出的新类称为派生类,又称为子类。从一个基类派生的继承称单继承,从多个基类派生的继承称为多继承。也就是说:一个类只能直接从一个类中继承数据。

那么,怎样实现继承呢?很简单,我们只需要按照创建类的方法后跟一个单词extends 父类名即可。比如此刻我们已经有了一个父类,代码如下:

class Preson{
function say()
{
echo "1";
}
}

此时我们想继承这个类,怎么办呢?看下代码:

class Student extends Preson{
function sing()
{
$this->say();
}
}

可以看到我们并没有在student这个类中并没有写say方法,但在sing方法中去调用了say方法,此刻我们去实例化student这个类后,再去调用sing方法,可以输出1。证明继承成功。

$obj = new Student();
$obj->sing();

如果继承的子类中有和父类相同的方法名会怎么样呢?

class Preson{
function say(){
echo "1";
}
} class Son extends Preson{ function say(){
echo "2";
}
} $obj = new Son();
$obj->say();

输出结果为2,可见子类的方法覆盖了父类的方法。如果父类不想被子类覆盖怎么办呢?

class Preson{
function say(){
echo "1";
}
} class Son extends Preson{ function say(){
parent::say();
echo "2";
}
} $obj = new Son();
$obj->say();

输出结果为12;我们在子类方法中加入parent::方法就可以让父类方法不被覆盖,继而在子类中延续和完善。

final关键字

这个关键字只能用来定义和定义方法, 不能使用final这个关键字来定义成员属性,因为final是常量的意思,我们在PHP里定义常量使用的是define()函数,所以不能使用final来定义成员属性。

使用final关键标记的方法不能被子类覆盖,是最终版本;

如果还是上面的例子,我们在类前面加一个关键字final会怎么样呢?

<?php
//创建一个父类
final class Preson{
function say()
{
echo "1";
}
} class Student extends Preson{
function sing()
{
$this->say();
}
} $obj = new Student();
$obj->sing();
?>

显示结果会报错:Fatal error: Class Student may not inherit from final class (Preson) 。

2019-07-23 类的继承和final关键字的应用的更多相关文章

  1. “全栈2019”Java第五十一章:继承与final关键字详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  2. Day 23 类的继承,派生,组合,菱形继承,多态与多态性

    类的继承 继承是一种新建类的方式,新建的类称为子类,被继承的类称为父类 继承的特性是:子类会遗传父类的属性 继承是类与类之间的关系 为什么用继承 使用继承可以减少代码的冗余 对象的继承 python中 ...

  3. 2017.10.23 Java 面向对象深入学习---final 关键字、static关键字、匿名对象等

    今日内容介绍 1.final 关键字 2.static 关键字 3.匿名对象 4.内部类 5.包的声明与访问 6.访问修饰符 7.代码块 第一节课 01(面向对象)final关键字概念.avi 02: ...

  4. Java 之继承和 final 关键字

    继承的概述 继承的特点 super 关键字 函数覆盖 子类的实例化过程 final 关键字 1. 继承的概述 继承是类与类之间的关系. 继承的好处: 提高了代码的复用性 让类与类之间产生了关系, 给第 ...

  5. 继承之final关键字的使用

    final关键字 使用final关键字坐标识具有"最终的"含义, final可以修饰类.方法.属性.和变量. final修饰类表示该类不能被继承 final修饰方法,则表示该方法不 ...

  6. Java面向对象-Java类的继承及super关键字

    Java面向对象-Java类的继承 1,继承定义以及基本使用 定义:子类能够继承父类的属性和方法: 注意点:Java中只支持单继承: 私有方法不能继承: 上代码: package com.java12 ...

  7. Java的继承,final关键字,super关键字

    1.继承的初始化顺序: 父类—>父类的初始化对象中的属性—>父类的构造方法—>子类—>子类的初始化对象中的属性—>子类的构造方法 若有构造方法:则先执行属性,再执行构造方 ...

  8. 类,接口,final

    继承extends 子类实例化过程: 子类中所有的构造方法默认都会访问父类中空参的构造方法 因为每一个子类的构造方法的提议行都有一条默认的语句super(); this super final修饰类, ...

  9. php面向对象:类的继承实例讲解

    什么是类的继承?说白了,我觉得就是提高代码使用效率的.下面我就给大家介绍下继承.大理石平台维修 类的继承概念 子类继承父类的所有成员变量个方法,包括构造方法,当子类被实例化时,php会现在子类中查询构 ...

随机推荐

  1. iOS中的NSOperation线程

    1.除NSThread之外的第二种多线程的编程方法   2.采用NSOperation(线程操作,通常用他的子类)和NSOperationQueue(线程队列)搭配来做多线程开发,采用NSOperat ...

  2. 【团队项目3】需求改进&系统设计

    一.需求 & 原型改进 1.针对课堂讨论环节老师和其他组的问题及建议,对修改选题及需求进行修改 根据用户反馈,我们针对如下问题做了修改: 问题1:如何保证机构是否是官方的?平台是否有监管? 修 ...

  3. xwiki 知识管理系统

    搭建一个知识管理平台, 用于知识库管理/规范管理, 可以作wiki, 可以将word/excel等导入进去, 支持全文搜索, 可以记周报, 会议纪要. 现在有很多文档管理系统, 比如阿里的语雀.腾讯的 ...

  4. bayaim_hadoop1_2.2.0伪分布式搭建

    ------------------bayaim_hadoop1_2.2.0伪分布式搭建_2018年11月06日09:21:46--------------------------------- 1. ...

  5. vue-cli2 打包

    npm run build 打包安装 相当于静态资源 解决vue-cli项目打包出现空白页和路径错误的问题 路径错误的问题解决方式: 打开config文件夹下的 index.js 找到如下图所示区域: ...

  6. go 学习笔记之环境搭建

    千里之行始于足下,开始 Go 语言学习之旅前,首先要搭建好本地开发环境,然后就可以放心大胆瞎折腾了. Go 的环境安装和其他语言安装没什么特别注意之处,下载安装包下一步下一步直到完成,可能唯一需要注意 ...

  7. VBA基础 - 数据类型

    概要 学习一种新语言, 数据类型和关键字是第一步. 数据类型 常用的数据类型如下: 类型 存储空间 范围 Boolean 2 bytes True 或者 False Byte 1 byte 0 ~ 2 ...

  8. ASP.NET MVC https全局配置

    //https全局配置 ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; ServicePointManager.S ...

  9. 当职责链遇到DI

    在GitHub上有个项目,本来是作为自己研究学习.net core的Demo,没想到很多同学在看,还给了很多星,所以觉得应该升成3.0,整理一下,写成博分享给学习.net core的同学们. 项目名称 ...

  10. Azure CosmosDB (14) 使用Postman访问CosmosDB REST API

    <Windows Azure Platform 系列文章目录> 今天研究了一下如何使用Postman访问Azure CosmosDB. CosmosDB API接口,可以参考:https: ...