1.为什么设计抽象类这个技术?
在实际开发中,我们可能有这样一种类,是其它类的父类,但是它本身并不需要实例化,主要用途是用于让子类来继承,这样可以达到代码复用,同时利于项目设计者来设计类。
2.在实现方法覆盖的时候,访问修饰符可以不一样,但是必须满足:子类的访问范围>=父类的访问范围。
例题1.
abstract class Animal{ public $name; public $age; abstract public function cry(); //这个方法没有方法体,这个方法主要是为了让子类去实现。 } class Cat extends Animal{ public function cry(){ echo "猫猫叫唤"; } } //创建一个子类实例 $cat1=new Cat(); $cat1->cry();
使用抽象类的注意事项:
1.格式:abstract class 类名{ //1.方法2.属性 }
2.如果一个类使用abstract 来修饰,则该类就是抽象类,如果一个方法被abstract修饰,则该方法就是抽象方法,(注意:抽象方法就不能有方法体)
3.抽象类可以没有抽象方法,同时还可以有实现了的方法。
例题
abstract class Animal{ public $name="abc"; protected $age; abstract public function cry(); pubulic function getNmae(){ return $this->name; } } class Cat extends Animal{ public function cry(){ echo "猫猫叫唤"; } } $cat1=new Cat(); $cat1->cry(); echo $cat1->getName();
4.如果一个类中,只要有抽象方法,则该类必须声明为abstract
5.如果A类继承了一个抽象类B,则要求A类实现从B类继承的所有抽象方法。
例题
<?php abstract class A{ abstract function text(); } //B类要么自己抽象,或者实现从A类继承的抽象方法 class B exteds A{ function text(){ echo "我实现A:text()"; } echo "hello"; } ?>