抽象类不能直接被实例化,你必须先继承该抽象类,然后再实例化子类。
如果类方法被声明为抽象的,那么其中就不能包括具体的功能实现,并且这个类必须声明为抽象类
抽象类,不一定有抽象方法,可能全是具体方法,对于这种情况,此类依然不能直接实例化.再用普通类继承一下就可以了.
如果类方法被声明为抽象的,那么其中就不能包括具体的功能实现,并且这个类必须声明为抽象类
抽象类,不一定有抽象方法,可能全是具体方法,对于这种情况,此类依然不能直接实例化.再用普通类继承一下就可以了.
继承一个抽象类的时候,子类必须实现抽象类中的所有抽象方法;另外,这些方法的可见性 必须和抽象类中一样(或者更为宽松)。如果抽象类中某个抽象方法被声明为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();
?>
总之,必须保证父类的抽象方法全部实现覆写。