Zihao

Make small but daily progress

0%

面向对象的基础四

c#允许把类和方法声明为abstract,即抽象类和抽象方法。

第一:抽象类不能被实例化。

第二:抽象方法是必须被子类重写的方法。抽象方法只有方法的声明,而没有方法的实现内容。

第三:如果类中包含抽象方法,那么就必须定义为抽象类,不论是否还包含其他一般方法。

抽象类拥有尽可能多的共同代码,拥有尽可能少的数据。

抽象类通常代表一个抽象概念,它提供了一个继承的出发点,当设计一个新的抽象类时,一定使用来继承的。所以,在一个以继承关系形成的等级结构里面,树叶节点应当是具体类,而树枝节点均应当是抽象类。

抽象类继承抽象类,目的是对抽象类的扩展,不能重写其中的抽象方法

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
//定义一个抽象类

abstract class User{

public function __toString(){

return get_class($this);

}

}

//实例化这个类会出错

//echo new user();

class NormalUser extends User{

}

$a = new NormalUser();

echo ‘这是类’;

echo $a;

echo ‘的实例’;

单独设置一个抽象类是没有意义的,只有有了抽象方法,抽象类才有类血肉。

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
abstract class User{

protected ?$sal = 0;

//这里定义抽象方法。抽象方法没有方法体,而且方法结束使用;号。

abstract function getSal();

abstract function setSal($sal);

//这里定义它的__tostring方法

public function __toString(){

return get_class($this);

}

}

//此时类继承这个抽象类必须要重写这个两个抽象方法。哪怕是{}空的方法体

//注意:1.不能缺少参数。2.不能多余的参数。3.参数类型不能错误。

class NormalUser extends ?User{

function getSal(){}

function setSal($sal){}

}

抽象方法没有{},而采用;结束。参数的数量和类型必须一致

PHP5.0和5.1的类中允许静态抽象方法。在5.2以上,只有接口可以拥有静态抽象方法。

欢迎关注我的其它发布渠道