4月28 继承 ,多态,重载,克隆

复习类和对象
类:由众多对象抽象出来的
对象:通过类实例化出来的
<?php
class Info
{
public $code;
protected $name;
private $sex;
function __construct($s)
{
$this->sex =$s;
}
function Say()
{
echo "hello";
}
function SetSex()
{
return $this->sex;
}
function GetSex($s)
{
$this->sex =$s;
}
function __set($a,$n)
{
$this->$a =$n;
}
function __get($a)
{
return $this->$a;
}
}

//实例化对象
$r =new Info("男");
$r->code ="join";
$r->Say();
//$r->sex; //报错的,因为是面向类的
var_dump($r);

?>

继承
相对于父与子的关系,可以联想到人
概念:如果有一个子类那么该子类会继承父类的一切东西 (私有成员访问不到)
做法:要求有父类和子类

在定义子类的时候需要加一个关键字:extends
特点:单继承,一个子类只能有一个父类, 联想到人:儿子只能有一个父亲,但是父亲可以有多个儿子
如果父类中有构造函数,子类在实例化的时候按照父类的构造函数的标准来实例化
parent 代表弗雷,只能在子类中使用,集成的是info,写info也是可以的,但最好不要写不利于维护
final:用来修饰类的,代表该类是一个最终类,该类无法被继承 ,使用时写在父类上面的

<?php
//final class Info
class Info
{
public $code;
protected $name;
private $sex;
function __construct($s)
{
$this->sex =$s;
}
function Say()
{
echo "hello";
}
}
class Test extends Info
{
public $birthday;
function Run()
{
echo "running man";
}
function Say()
{
parent::Say();//父类的也会被调用的
echo "你好"; //直接输出时会被覆盖
}
}
$t = new Test("男");
$t->code = "p001";
//echo $t->sex;//报错了,访问不到
//$t->Run(); //父类中没有的新方法的输出
$t->Say(); //父类中有的方法的输出,不过父类的被覆盖了
var_dump($t);

?>

静态成员
普通成员是体现在对象上的
类里面的普通成员是属于对象的,不属于类的(调用的时候是用对象调用)
什么叫做静态的:静态的成员是属于类,不是属于每个对象的
static关键字定义静态的,定义静态成员使用static关键字
静态方法里面不能调用普通成员,不能用$this,而是用self
静态方法可以调用静态成员但是要使用self关键字
self代表该类,$this 代表该对象

<?php
class Info
{
public static $class; //static 静态的
public $code;
protected $name;
private $sex;
static function Test() //调用静态方法
{
echo Info::$class; //调用自身类里面的静态成员
echo "静态方法";
}
function __construct($s)
{
$this->sex =$s;
}
function Say()
{
echo Info::$class; //普通方法里面可以调用静态成员
echo "hello";
}
}
$r =new Info("男");
echo Info::$class ="0305"; //访问静态成员
echo Info::Test(); //静态里面不可以调用普通成员
$r->Say();

//也就是说:静态里面不可以调用普通的,普通方法里面可以调用静态的,静态方法里面可以调用静态成员

?>

多态:

多态的概念:当父类引用指向子类实例的时候,由于子类对父类函数进行了重写,导致我们在使用该引用去调用相应的方法表现出的不同

条件:1.必须有继承
2.父类的引用指向子类的实例
3.子类必须要对父类的方法进行重写

<?php
class Ren
{
public $name;
public $sex;
function Say()
{
echo "hello";
}
}
class China extends Ren
{
function Say()
{
echo "你好";
}
}
class America extends Ren
{
{
echo "hi";
}
}

$r = new Ren(); // $r代表Ren类的引用
$r1 = new China(); //$r1代表China类的引用

$r2 =new America();//$r2代表America类的引用

$r->Say(); //hello
$r1->Say(); //你好

$r2->Say();//输出hi

?>

在c#中Ren $r =new Ren();以后用到的所有的$r时就是Ren的类型的,以后的赋值都没有任何的作用
Ren $r = new China();c#中也是可以的,是引用$r指向China的子类
再比如:Ren $r = new America();会像上输出America类里面的一些方法

函数的重载:
关于重载,一般出现在强类型语言中,弱类型语言中不存在,因此这里只是知道有这样的定义,会出现在一些面试的场合。所以条件概念都是必记得内容

假如在php中有重载时:所有以下都是假设存在的
<?php
class Ren
{
public $name;
public $sex;
function Say()
{
echo "hello";
}
function Say($a)
{
echo $a."hello";
}
function Say($a,$b)
{
echo $a.$b."hello";
}
}
$r = new Ren();
$r->Say(); //会根据里面写的参数的个数输出的内容不同

?>
重载实现的条件:1)函数名必须相同(方法名)
2)在函数里面的参数的个数不同(方法名相同的基础上)
3)如果参数的个数相同时,类型不同
eg:function Say(int,$a) 和 function Say(string,$b)
php是弱类型语言所以没有重载:首先php什么类型都可以存储因此类型不同的条件不能满足,
php里面有可变参数的函数,因此参数个数不同这一块很难实现

__tostring()方法的不同于c#中的,在c#中是转换成字符串类型

<?php
class Ren
{
public $name;
public $sex;
function Say()
{
echo "hello";
}
function __tostring()
{
return "这个对象变量包含name和sex,和一个say方法";
}
}

$r =new Ren(); //__tostring用法的输出
echo $r;
?>

对象的克隆:

<?php

class Ren
{
public $name;
public $sex;

function Say()
{
echo "hello";
}

function __clone() //对象克隆的时候自动执行
{
$this->name="李四"; //$this指复本(克隆出来的新对象)
}
}

$r =new Ren();
$r->name = "张三";
$r1=clone $r;
echo $r->name;
echo $r1->name;
var_dump($r1);
?>
克隆对象相当于复制一份交给$r1,在function方法中$this是指新克隆出来的对象

时间: 2024-08-17 00:12:55

4月28 继承 ,多态,重载,克隆的相关文章

4月28日 函数重载

<?php //函数重载 //条件: //1.函数名必须相同 //2.函数里面的参数个数不同,如果个数相同,类型不同 //基本不用的原因: //php是弱类型语言,所以没有重载 //php有可变参数的函数 class Ren { public $name; public $sex; function Say() { echo "你好"; } function Say($a) { echo $a."你好"; } function Say($a,$b) { ech

php面向对象 封装继承多态 接口、重载、抽象类、最终类总结

1.面向对象 封装继承多态  接口.重载.抽象类.最终类 面向对象 封装继承多态  首先,在解释面向对象之前先解释下什么是面向对象? [面向对象]1.什么是类? 具有相同属性(特征)和方法(行为)的一系列个体的集合,类是一个抽象的概念2.什么是对象?从类中拿到的具有具体属性值得个体,称为对象,对象是一个具体的个体 所以,面向对象即我们专注对象来处理问题,通过从一个个具有属性和功能的类中拿到对象来处理问题. 下面我们再来细说下面向对象的三大特征:继承/封装/多态 一.继承 在PHP中我们主要通关E

php 学习路线 赵兴壮2014年4月28 日 加油

第一阶段 第一讲,WEB基础     1.1 网站基本知识: 1.2 网络协议介绍: 1.3 B/S与C/S结构的区别: 1.4 WEB编程.网站开发技术介绍.      第二讲,网页设计     2.1 Dreamweaver介绍及使用: 2.2 静态网页HTML语言: 2.3 标题与段落,换行与分割线: 2.4 表格.表单: 2.5 框架.超链接.图片.     实例:1,使用表格进行网页布局设计: 2,使用表单.表格.框架进行系统后台界面设计. 第三讲,DIV+CSS     3.1 CS

No2_4.接口继承多态_Java学习笔记_经典案例

1 import java.util.ArrayList; 2 import java.util.Collections; 3 import java.util.List; 4 5 /** 6 * @title 接口继承多态的经典范例 7 * @author 作者:sunshine yaqingl 8 * @date 创建时间:2016年7月6日 下午5:27:39 9 */ 10 11 //使用Comparable接口自定义排序 12 class Employee implements Com

封装继承多态到底讲的是什么

封装继承多态到底讲的是什么 封装.继承.多态并不是针对C#语言提出来的,他是一个在面向对象思想下产生的一个概念.所以想要弄明白封装.继承.多态,首先就要先了解面向对象概念. 封装:当我们提及面向对象的时候,这个对象怎么来?就是通过我们人为的封装得来.封装就是把一些特征或功能组合到一个抽象的对象上.就比如说电脑:它的特征是有一个显示屏,有一个主机,有鼠标和键盘等等.功能有计算等.那我们把这些特征和功能组合到“电脑”这个抽象的名词上时,“电脑”于是就有了这些特征和功能.但这个“电脑”不是实物,它代表

(1) 深入理解Java面向对象三大特性 封装 继承 多态

转眼已经工作快6年了,最开始做了2年J2EE:然后整了2年的数据仓库,主要是Cognos的报表开发:现在从事4G LTE核心网的开发,用的语言任然是Java,但写代码的机会不多,基本都是看代码找BUG,偶尔做点new feature也是在比较成熟的框架上复制.粘贴.修改,大部分时间还是在理解业务,钱多.事少.离家近,当时来这家公司图的是后面2点,2年过去了,英文水平有所提升,对敏捷开放也有一定的了解,但技术方面明显退步了或者说没有进步吧,本来以前也不怎么好,因为工作上用不到,自己也没怎么学习,所

初识JAVA(【面向对象】:pub/fri/pro/pri、封装/继承/多态、接口/抽象类、静态方法和抽象方法;泛型、垃圾回收机制、反射和RTTI)

JAVA特点: 语法简单,学习容易 功能强大,适合各种应用开发:J2SE/J2ME/J2EE 面向对象,易扩展,易维护 容错机制好,在内存不够时仍能不崩溃.不死机 强大的网络应用功能 跨平台:JVM,字节码 两个命令: javac helloworld.java:将Java文件编译为字节码的.class文件 java helloworld:运行Java程序...??暂时这么认为 数据类型: 普通数据类型:int a=3; 对象数据类型:使用关键字new,String s=new String("

面向对象的三大特性---封装继承多态

面向对象的三大特性---封装继承多态 首先我们来创建一个控制台程序 新建一个父类Person 创建一个子类继承父类Person 子类: main函数: 输出结果: 根据结果显示创建子对象,首先调用父类的构造函数在调用子类的构造函数. 继承的传递性 例如: A:B,B:C,则A:C ⅰ.继承过来之后被隐藏,有意隐藏加一个关键字"new",如果加了关键字"new",就告诉子类,父类里面的sayHi只能被隐藏,不能被覆写  ⅱ.继承过来之后被覆写/重写,覆写需要在父类里面

python面向对象之继承/多态/封装

老师说,按继承/多态/封装这个顺序来讲. 子类使用父类的方法: #!/usr/bin/env python # coding:utf-8 class Vehicle: def __init__(self,name,speed,load,power): self.name = name self.speed = speed self.load = load self.power = power def run(self): print("开动啦.") class Benz(Vehicle