一、Abstract Class简介
Abstract Class是一种抽象类,它不能被实例化,只能被继承。Abstract Class的主要作用是提供一个基类,定义一些抽象的方法,让其子类去实现具体的逻辑,并通过这些抽象的方法来规范其子类。
Abstract Class可以看成是普通类和Interface的结合体,它既可以有普通类的方法、属性和构造函数,也可以有Interface的抽象方法。
二、Abstract Class和普通类的区别
相对于普通类,Abstract Class有以下区别:
1、Abstract Class不能被实例化;
2、Abstract Class可以有抽象方法和普通方法;
3、Abstract Class中定义的抽象方法必须在其子类中实现;
4、一旦一个类继承了Abstract Class,它必须实现该Abstract Class中所有的抽象方法才能被实例化。
三、Abstract Class和Interface的区别
相对于Interface,Abstract Class有以下区别:
1、Interface不能有普通方法,只能定义抽象方法;Abstract Class可以有抽象方法和普通方法;
2、一个类可以实现多个Interface,但只能继承一个Abstract Class;
3、Interface中定义的抽象方法必须在实现类中全部实现,否则会报错;Abstract Class中定义的抽象方法可以在子类中选择性地实现;
4、Interface中不能有属性,只能有常量;Abstract Class中可以有属性和常量;
5、Interface不能有构造函数;Abstract Class可以有构造函数。
四、使用Abstract Class的注意事项
使用Abstract Class需要注意以下几点:
1、Abstract Class不能被实例化,只能通过其子类来实例化;
2、Abstract Class中的抽象方法必须在其子类中全部实现;
3、Abstract Class中的普通方法可以在子类中选择性地实现或覆盖;
4、Abstract Class中可以有普通方法、常量和属性,所以如果类中需要有一些共同的方法和属性,且这些方法和属性在所有的子类中都具有相同的作用和特性,那么可以将这些方法和属性写在Abstract Class中,避免在所有的子类中重复书写;
5、Abstract Class经常和模板方法模式一起使用,以实现代码的重用。
五、代码示例
abstract class Animal { public $name; public $age; public function __construct($name, $age) { $this->name = $name; $this->age = $age; } abstract public function move(); } class Dog extends Animal { public function move() { echo "$this->name is running!
"; } } class Cat extends Animal { public function move() { echo "$this->name is jumping!
"; } } $dog = new Dog('Tommy', 3); $dog->move(); // Tommy is running! $cat = new Cat('Kitty', 2); $cat->move(); // Kitty is jumping!
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/184070.html