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);
}
}
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);
public function __toString(){
return get_class($this);
}
}
class NormalUser extends ?User{
function getSal(){}
function setSal($sal){}
}
|
抽象方法没有{}
,而采用;
结束。参数的数量和类型必须一致
PHP5.0和5.1的类中允许静态抽象方法。在5.2以上,只有接口可以拥有静态抽象方法。