面向对象的3大特性
发布日期:2021-10-17 00:06:26
浏览次数:15
分类:技术文章
本文共 2237 字,大约阅读时间需要 7 分钟。
1.封装 ****
目的:为了使一个类更加安全
做法: ****
1.将成员变量变为私有的
2.再类中做方法来间接访问成员变量
3.在方法中加入控制条件
//一个成员变量还是可以的,但是不适用于多个成员变量(即可写也可读)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | class Ren { public $code ; //人员代号 public $name ; //人员姓名 private $sex ; //人员性别 private $age ; //人员年龄 //构造函数:用来初始化性别 function __construct( $s ) { $this ->sex= $s ; } //造一个修改年龄的方法 写 function SetAge( $a ) { if ( $a >18 && $a <50) //条件满足才往下进行 { $this ->age= $a ; } } //造一个获取age值得方法 读 function GetAge() { return $this ->age; } } //造对象 $r = new Ren( "男" ); $r ->SetAge(60); /条件是18-50之间的年龄,60超出了,所以显示的null<br>var_dump( $r ); |
//对于多个变量就可以使用下面的方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | class Ren { public $code ; //人员代号 public $name ; //人员姓名 private $sex ; //人员性别 private $age ; //人员年龄 //构造函数:用来初始化性别 function __construct( $s ) { $this ->sex= $s ; } //__set()魔术方法,给变量赋值 function __set( $n , $v ) //固定要有两个参数:变量名称,变量的值 { if ( $n == "age" ) { if ( $v >18 && $v <50) //限制条件 { $this -> $n = $v ; } } else { $this -> $n = $v ; } } //__get()魔术方法,取变量值 function __get( $n ) //一个变量名 { return $this -> $n ; } } //造对象 $r = new Ren( "男" ); $r ->age=70; //自动调用__set()方法,将变量名当做第一个参数,将等号右边的值当做第二个参数 $r ->name= "zha" ; //自动调用__set()方法,将变量名当做第一个参数,将等号右边的值当做第二个参数 echo $r ->sex; //自动调用__get()方法<br>var_dump($r); |
//另一个知识点
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | class Dog { public $name ; function Jiao() { echo $this ->name. "囧" ; //注意 } function Setname( $n ) { $this ->name= $n ; return $this ; //返回新的对象 } } $d = new Dog(); $d ->Setname( "1" )->Jiao(); //连续调对象 |
2.继承
父类
子类:可以继承父类的一切
重写的关键字override,子类对父类的方法
特点:单继承:一个子类只能有一个父类,一个父类可以有多
例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | class Ren { public $name ; function Say() { echo $this ->name. "正在说话" ; } } class China extends Ren //关键字 extend { //子类对父类的方法进行重写 function Say() { parent::Say(); //在子类中调用父类的成员:找父类中的这个方法,把方法中的内容全部拿过来 echo "你好" ; } } $c = new China(); $c ->Say(); var_dump( $c ); |
子类对父类的方法重写后,父类的方法还有,另外加了一个方法,所以输出时是:正在说话你好
overlord 重载
重载:它可以是类中的某个方法产生多种效果,根据传入的参数不同,可以执行不同的逻辑;重载是多态中的一种:编译多态
3.多态
当父类引用指向子类实例的时候,由于子类对父类的方法进行了重写,父类引用在调用该方法时表现出的不同,称为多态:运行多态
条件有4个:
1.要有继承
2.父类引用指向子类实例
3.要有重写
4.调重写方法
转载地址:https://blog.csdn.net/sulan2131/article/details/69101499 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
留言是一种美德,欢迎回访!
[***.207.175.100]2024年03月31日 02时00分31秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
算法C++ 邻接表STL实现(第四章)
2019-04-27
算法C++ 面试常考拓扑排序理解 面试复习用(第四章)
2019-04-27
Leetcode 第三周周赛总结(第 50 场双周赛)
2019-04-27
Leetcode 5717. 最少操作使数组递增(DAY 89) ---- 双周赛题目
2019-04-27
Leetcode 5718. 统计一个圆中点的数目(DAY 89) ---- 双周赛题目
2019-04-27
Leetcode 5719. 每个查询的最大异或值(DAY 89) ---- 双周赛题目
2019-04-27
Leetcode 第三周周赛总结(第 237 场周赛)
2019-04-27
Leetcode 5734. 判断句子是否为全字母句(DAY 89)---- 周赛题目
2019-04-27
Leetcode 5735. 雪糕的最大数量(DAY 89) ---- 周赛题目
2019-04-27
Leetcode 5736. 单线程 CPU(DAY 89) ---- 周赛题目
2019-04-27
Leetcode 1518. 换酒问题(DAY 115) ---- 贪心算法学习期
2019-04-27