类的继承
简单来说就是一个类里面含有另一个类里面多有的特征,并且还有一些自己的东西,那么就可以说这个类是另一个类的继承

基本概念:
* 继承:一个类获得另一个类的所有特征,就可以称为继承
* 派生:从一个已有的类产生一个新的类,就可以称为派生
(继承和派生其实就是指同一件事情,只是从不同的角度来看待)
* 父类/子类:以及存在的类为父类,从已有类为基础新生出来的类为子类。
父类也称之为“基类”,子类也称之为“派生类”。
* 单继承:一个类只能从一个上级类处继承特征信息(就像是一个孩子,正能有一个父亲),但上级类可以有多个子类(就像是一个父亲可以有多个孩子)
* 扩展:在子类中需要再定义一些新的特征信息(属性、方法和常量),如果不扩展出新的特征信息,那么这个扩展也没有意义

访问(权限)修饰符:
访问的位置有三个:
1、某个类的内部:指在本类中使用
2、某个类的具有继承关系的子(父)类的内部:是指其他方法的某个类中
3、某各类的外部:一般就是独立的代码区,不在任何类中
*public:公共的(用这个修饰符修饰的成员可以在“任何位置”使用)
*protected:受保护的,可以在当前类和与之具有继承关系的子(父)类中
*private:私有的,只能在它自己所在的类中使用

parent代表父类
parent通常用于在子类中调用父类的成员的时候使用,多数通常就是使用父类的“静态类”的成员--因为parent代表的是类,不是对象
parent常用的两种方法:
class lei{
public $v1 = 1;
function fun(){
echo "<br>这是父类,数据有:";
echo "<br>lei中v1 = ".$this->v1;
}
function __construct($v1){
$this->v1 = $v1;
}
}
class lei2 extends lei{
public $v2 = 2;
function fun2(){
echo "<br>这是子类,数据有:";
//基本用法
parent::fun();//调用父类的fun方法;
echo "<br>lei2中v2=".$this->v2;
}
function __construct($v1,$v2){
//经典用法;
parent::__construct($v1);//调用父类的构造函数来初始化v1;
$this->v2 = $v2;
}
}
$dx = new lei2(10,20);
$dx->fun2();

构造方法和析构方法在继承中的表现:
子类中没有定义构造方法时会调用父类的构造方法,所以在实例化子类时,需按照父类的构造方法的形式进行
如果子类定义了自己的构造方法,则不会再去调用父类的构造方法,如果需要,也可以手动调用:parent::__construct();

重写(override):
重写,又叫覆盖,就是将从父类继承下来的属性或方法重新定义。

举例:
//创建一个类,作为父类
class jizhuidongwu{
//定义一个属性
public $v1 = "具有脊椎";
//定义一个方法
function fun(){
echo "<br>我是脊椎动物,特征为:";
echo "<br>属性p1=".$this->v1;
}
}
//创建子类
class human extends jizhuidongwu{
//重写(覆盖)掉父类的属性
public $v1 = "具有28节脊椎骨的脊椎";
public $v2 = "有32颗牙齿";
//重写(覆盖)掉父类中的方法
function fun(){
echo "<br>我是人类,特征为:";
//echo "<br>属性v1:".$this->v1;
parent::fun();
echo "<br>属性v2:".$this->v2;
}
}
$dx = new human();
$dx->fun();

重写的基本要求:
访问控制权限:
下级的访问权限应该不低于上级的访问权限。
比如:
上级为 public(公共的):下级只能是public。
上级为 protected(受保护的):下级就可以是protected和public。
上级为 private(私有的) :下级就可以为public protected private。//但这种情况没有 实际意义
方法的参数形式:
方法的参数形式应该跟父类是相同的:
比如:父类中的方法为:function($v1){}; 那么子类中的方法的参数只能是function($v1){};
这时候子类中的方法参数不能是:function(){}; 也不能是 function($v1,$v2){};

私有属性和私有方法的重写问题:私有属性和方法都不能覆盖
但其实子类可以定义跟父类私有的同名属性或方法。
只是当作一个自身的新的属性或方法来看待而已。不过方法的参数必须一致。

构造方法的重写问题:构造方法不但可以像其他普通方法一样重写
而且,比普通方法更宽松:重写的时候参数可以不一致。

最终类final class:
简单来说就是一个类 不想作为父类的时候,就可以把它作为一个最终类
形式为:
final class 类名{

}
最终方法 final method
一个方法如果没有特别的声明,那么下级子类就可以对其进行重写(覆盖).
如果你不想这个方法被下级类重写,就可以将其声明为最终方法。
形式为:
final function 方法名(){

}

设计模式:
什么叫设计模式:
要求就是让代码易扩展,易维护,易复用。
设计模式就是解决问题的常规做法,就是传说中的经验

工厂模式:

工厂就是一个类:
形式:
class A{
var $a = "123";
}
class B{
var $b = "123";
}
class C{
var $c = "123";
}
// 定义一个工厂类 作用就是实例化对象
class gongchang{
static function fun($classname){
return new $classname();
}
}

$A = gongchang::fun("A");//获取一个A类的对象
$B = gongchang::fun("B");//获取一个B类的对象
$C = gongchang::fun("C");//获取一个C类的对象

单例模式:
某个类,只允许其“创建”出一个对象,即使去进行多次创建,也只能得到一个对象。
三私一公。
class B{
public $v1 = 10;
privatr static $instance;

privatr function __construct(){}
public static function getnew(){
//如果本类中的$instance还没有数据
if(!isset(B::$instance)){
B::$instance = new self;
}
renturn B::$instance;
}
}
$o1 = B::getnew();
$o1-> = 100;
$o2 = B::getnew();
var_dump($o1);
echo"<br>";
var_dump($o2);
echo "<br>o1中的v1为:".$o1->v1;
echo "<br>o2中的v1为:".$o2->v1;

转载于:https://www.cnblogs.com/LQK157/p/9142869.html

类的继承 设计模式相关推荐

  1. php protected 的继承,14 PHP 类的继承 [public protected private] parent 构造方法 析构方法 重写 最终类和方法 设计模式...

    类的继承 简单理解: 某个类A具有某些特征,另一个类B,也具有A类的所有特征,并且还可能具有自己的更多的一些特征,此时,我们就可以实现:B类使用A的特征信息并继续添加自己的一些特有特征信息. 基本概念 ...

  2. Python 学习笔记 类的封装 类的继承 多态继承 类方法和静态方法 单例设计模式

    一.类的封装: 1.概念: 广义的封装:函数和类的定义本身,就是封装的体现 狭义的封装:一个类的某些属性,在使用的过程 中,不希望被外界直接访问,而是把这个属性给作为私有的[只有当前类持有],然后暴露 ...

  3. 第九天2017/04/18(2、类的继承、面试题:继承访问修饰符、组合、static、构造、多态)

    继承:可以使用原来的代码,代码复用 多态:代码复用.接口复用,用基类的指针"根据对象"调用"指定对象的函数". 1.继承.访问修饰符//C++类成员的3种访问级 ...

  4. 模块的封装之C语言类的继承和派生

    [交流][微知识]模块的封装(二):C语言的继承和派生 在模块的封装(一):C语言的封装中,我们介绍了如何使用C语言的结构体来实现一个类的封装,并通过掩码结构体的方式实 现了类成员的保护.这一部分,我 ...

  5. 第十一节(单例模式初步、类的继承)

    设计模式 什么是设计模式:设计模式是可以重复利用的解决方案设计模式的提出是在 1995 人,是由 4 为作者提出的,称为 GoF, 也就是"四人组"设计模式从结构上分为三类:创建型 ...

  6. 00 原型链 继承 设计模式

    目录 1 原型链图 2 继承 3 设计模式 1 单例模式 2  惰性单例 3 静态变量 4  适配器模式 5 观察者模式 7 组合模式 看笔记49 8 策略模式 9 命令模式 10 迭代器模式 11 ...

  7. Python Class 类的继承与多继承

    Python Class 类的继承与多继承 1.继承概念 2.继承中的访问控制 3.示例 3.1 示例 1 3.2 示例 2 3.3 示例 3 3.4 示例 4 3.5 示例 5 3.6 示例 6 3 ...

  8. [读书笔记]《Hands on Design Patterns with C++》——类,继承,多态,模板

    前言 <Hands on Design Patterns with C++>首先这本书不是跟之前的书籍一样只是重点在经典的 23 种"设计模式" 上,这些经典的设计模式 ...

  9. C++:随笔5---this指针和类的继承

    this指针:(通过一个典型的例子来认识他) class Human {char fishc;Human(char fishc);//构造函数}; Human::Human(char fishc)// ...

最新文章

  1. java不同工厂生产不同电器_完整案例分析再加知识整合——艾特抽象工厂模式,超详细的...
  2. Linux日志系统-04:logrotate命令格式
  3. Java中的字符串驻留
  4. php angular使用,如何使用angular.js PHP从mysql显示数据?
  5. mysql 索引 测试_mysql的索引测试
  6. 无法连接NVIDIA驱动:NVIDIA-SMI has failed because it couldn’t communicate with the NVIDIA driver
  7. PowerShell加密SQL Server的密码技术
  8. 防止开源的加拉帕戈斯综合症,系统软件和开源都是手段不是目的
  9. libaio介绍和使用
  10. H3C s5820v2 堆叠2台机器配置说明
  11. 【计算机网络】思科实验(3):使用三层交换机实现跨VLAN间的通信
  12. 遗传算法之基因型与表现型的相互转换
  13. linux下安装matlab运行环境
  14. css33d图片轮播_通过html+css3实现图片轮播切换
  15. 「镁客早报」三星第十一代商务旗舰W2019发布;美国实现120KW无线充电
  16. Telnet 1521端口连接失败问题,经过四天的努力终于解决!
  17. 叠加原理--戴维南等效电路--第四篇
  18. android最新源码(4.4.2_r1版本以上)下载
  19. Entity Relation Fusion for Real-Time One-Stage Referring Expression Comprehension 2021
  20. PHP 如何自动发送邮件?

热门文章

  1. ASP.NET 百万级分页查询(Oracle)
  2. android语音识别和合成第三方
  3. java list 截取_Java常用代码汇总,建议背会
  4. Leetcode —— 面试题 04.02. 最小高度树(Python)
  5. ffmpeg sws_scale函数详解
  6. 在Windows下使用CMake+MinGW搭建C/C++编译环境
  7. x264 scan8存储分析
  8. 波兰表达式 构建 表达式树
  9. mysql 内部安全性_MySQL数据库的内部以及外部安全性简介
  10. matlab历史指示穿作用,重新学习MATLAB——相见恨晚的重要应用技巧