您的位置:首页 > 编程语言 > PHP开发

php面向对象之抽象类

2014-04-01 19:48 316 查看
抽象类不能直接被实例化,你必须先继承该抽象类,然后再实例化子类。

如果类方法被声明为抽象的,那么其中就不能包括具体的功能实现,并且这个类必须声明为抽象类

抽象类,不一定有抽象方法,可能全是具体方法,对于这种情况,此类依然不能直接实例化.再用普通类继承一下就可以了.
继承一个抽象类的时候,子类必须实现抽象类中的所有抽象方法;另外,这些方法的可见性 必须和抽象类中一样(或者更为宽松)。如果抽象类中某个抽象方法被声明为protected,那么子类中实现的方法就应该声明为protected或者public,而不 能定义为private。

用普通类做父类,当模板,子类对其某个方法,可以重写,也可以不重写.

 用抽象类时,抽象方法必须被重写,才能使用.

抽象类比普通父类有如下好下:

一是:指定的方法,必须去重写,实现.

二是: 重写时,参数也必须与父类的相应方法一致.

<?php
abstract class welcome {
    abstract function greet($a,$b,$c);
    abstract function bye();
}

class engwelcome extends welcome{
    public function greet($a,$b) {
        echo 'welcome<br />';
    }

    public function bye() {
        echo 'bye<br />';
    }
}
$ming = new engwelcome();
$ming->greet(3,4);//报错:Fatal error: Declaration of engwelcome::greet() must be compatible with that of welcome::greet() 
?>


如果继承抽象类的子类也是抽象类,覆写父类的抽象方法可以以如下方式写:

<?php
abstract class human {
abstract public function m1();
abstract public function m2();
protected function getVal($val){
echo $val;
}
}

abstract class stu extends human{
public function m1() {
echo 'm1<br />';
}
}

abstract class banhua extends stu {
public function m2() {
echo 'm2<br />';

}
}

class jin extends banhua {
}

$jin = new jin();
$jin->m2();

?>
总之,必须保证父类的抽象方法全部实现覆写。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: