静态、抽象类、接口
发布日期:2021-10-17 00:06:24 浏览次数:21 分类:技术文章

本文共 1817 字,大约阅读时间需要 6 分钟。

1.静态

普通成员:是属于对象的
静态成员:a.是属于类的;  

b.定义时加上关键字 static ;  

c.关键字 self:在类中代表该类;  

d.调用静态成员符号双冒号::


普通方法是可以调用静态成员的; 静态方法不能调用普通成员

例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class 
Ren
{
    
public 
$name
;
    
public 
static 
$zhongzu
;    
//将普通成员变量变为静态成员变量,加上关键字 static
     
    
//普通方法
    
function 
Say()
    
{
        
echo 
Ren::
$zhongzu
.
"你好"
;   
        
//echo self::$zhongzu."你好";  //关键字 self:在类中代表该类: 类名修改,可以用这个关键字 
    
}  
}
 
Ren::
$zhongzu
=
"战斗民族"
;   
//调用静态成员使用双冒号::
 
$r 
new 
Ren();
$r
->Say();   
//普通方法可以调用静态方法

输出结果就是:战斗民族你好

 

2.抽象类

抽象类a.它不能被实例化, b.它作为父类使用,   c.关键字 abstract

例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
abstract 
class 
Dongwu   
//使用关键字 abstract 可以成为抽象类
{
  
public 
$name
;
  
public 
$age
;
     
  
function 
Run()
  {
    
echo 
"跑"
;
  }
}
 
class 
Dog 
extends 
Dongwu   
//继承父类
{      
}
 
$d 
new 
Dog();
$d
->Run();

实例化子类继承父类就可以输出正确

注意:强行实例化抽象类,会出现错误

抽象类的扩展功能很强,可以不动源代码的基础上扩展出其他的类

例如:

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
abstract 
class 
YunSuan   
//抽象类的关键字  abstract
{
  
public 
$a
;
  
public 
$b
;
     
  
function 
Suan()
  {
             
  }
}
 
//Jia继承YunSuan并且修改Suan方法
class 
Jia 
extends 
YunSuan
{
  
function 
Suan()
  {
    
return 
$this
->a+
$this
->b;
  }
}
 
//Cheng继承YunSuan并且修改Suan方法
class 
Cheng 
extends 
YunSuan
{
  
function 
Suan()
  {   
  
return 
$this
->a*
$this
->b;
  }
}
 
$J 
new 
Jia();
$J
->a=2;
$J
->b=10;
echo 
$J
->Suan();
  

 

3.接口

接口:a.极度抽象的类

b.定义方式 :interface

c.接口中的方法是控制子类必须实现某些功能(接口中出现的方法,子类必须实现)

d.实现接口 关键字:implements

例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
interface 
IUSB    
//I开头,I就是定义方式的开头
{
  
function 
Read();    
//成员方法:没有函数体,只声明函数名  
  
function 
Write();
}
 
class 
ShuBiao 
implements 
IUSB    
//实现接口 关键字:implements
{
  
function 
Read()
  {
    
echo 
"鼠标插上"
;   
  }
     
  
function 
Write()
  {
    
echo 
"chuanshu"
;   
  }
}
 
$s
new 
ShuBiao();
$s
->Read();

输出结果就是:鼠标插上

注意:如果子类中没有把父类的方法全部实现,那么输出时会报错;如果子类把父类的方法全部实现了,那么就会输出正确的调用方法答案

转载地址:https://blog.csdn.net/sulan2131/article/details/69101348 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:面向对象的3大特性
下一篇:设计模式

发表评论

最新留言

不错!
[***.144.177.141]2024年04月02日 04时45分55秒