php面向对象之抽象类

抽象类不能直接被实例化,你必须先继承该抽象类,然后再实例化子类。
如果类方法被声明为抽象的,那么其中就不能包括具体的功能实现,并且这个类必须声明为抽象类
抽象类,不一定有抽象方法,可能全是具体方法,对于这种情况,此类依然不能直接实例化.再用普通类继承一下就可以了.

继承一个抽象类的时候,子类必须实现抽象类中的所有抽象方法;另外,这些方法的可见性 必须和抽象类中一样(或者更为宽松)。如果抽象类中某个抽象方法被声明为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();


?>
总之,必须保证父类的抽象方法全部实现覆写。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值