面向对象的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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:php中的常用函数
下一篇:静态、抽象类、接口

发表评论

最新留言

留言是一种美德,欢迎回访!
[***.207.175.100]2024年03月31日 02时00分31秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

Leetcode 347. 前 K 个高频元素(DAY 88) ---- Leetcode Hot 100 2019-04-27
Leetcode 337. 打家劫舍 III(DAY 88) ---- Leetcode Hot 100 2019-04-27
算法C++ 邻接表STL实现(第四章) 2019-04-27
算法C++ DepthFirstSearch BreadthFirstSearch代码模式示范实现(第四章) 2019-04-27
算法C++ 面试常考拓扑排序理解 面试复习用(第四章) 2019-04-27
Leetcode 210. 课程表 II(DAY 89) ---- 拓扑排序相关题目 打周赛去了 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 75. 颜色分类(DAY 90) ---- Leetcode Hot 100(今天一天快把半学期的高数赶完了 明天再补补了 力扣每天还是得刷) 2019-04-27
Leetcode 17. 电话号码的字母组合(DAY 90) ---- Leetcode Hot 100 2019-04-27
Leetcode 621. 任务调度器(DAY 91) ---- Leetcode Hot 100(给妹妹送奶茶了 嘻嘻 :) ) 2019-04-27
Leetcode 1716. 计算力扣银行的钱(DAY 115) ---- 贪心算法学习期 2019-04-27
Leetcode 1518. 换酒问题(DAY 115) ---- 贪心算法学习期 2019-04-27
Leetcode 1046. 最后一块石头的重量(DAY 115) ---- 贪心算法学习期 2019-04-27