多态真的有用吗?使用在哪些场景?
多态是面向对象编程(OOP)中的一个重要概念,它能够增加代码的灵活性和可维护性。多态的主要思想是同一个方法名在不同的类中有不同的实现,或者说同一个接口可以有多个不同的实现方式。让我们通过一个生动的例子来说明多态的用途。
假设有一个图形类,其中包括圆形和矩形两个子类。每个图形都有一个计算面积的方法,但是计算面积的方式在圆形和矩形之间是不同的。
class Shape {
// 通用代码
}
class Circle extends Shape {
private $radius;
public function __construct($radius) {
$this->radius = $radius;
}
public function calculateArea() {
return pi() * $this->radius * $this->radius;
}
}
class Rectangle extends Shape {
private $width;
private $height;
public function __construct($width, $height) {
$this->width = $width;
$this->height = $height;
}
public function calculateArea() {
return $this->width * $this->height;
}
}
现在,如果我们要计算一组图形的总面积,可以使用多态。我们可以定义一个通用的函数,该函数接受一个Shape
对象数组,并计算它们的总面积。
function calculateTotalArea(array $shapes) {
$totalArea = 0;
foreach ($shapes as $shape) {
$totalArea += $shape->calculateArea();
}
return $totalArea;
}
现在我们可以创建圆形和矩形对象,将它们放入数组中,然后使用calculateTotalArea
函数计算它们的总面积,而无需关心具体是哪种图形。
$circle = new Circle(5);
$rectangle = new Rectangle(4, 6);
$totalArea = calculateTotalArea([$circle, $rectangle]);
echo "总面积是:" . $totalArea;
这里,calculateTotalArea
函数是多态的体现。它能够接受不同类型的图形对象,而无需知道具体对象的类型。这使得代码更加灵活,当你需要添加新的图形类型时,无需修改已有的计算总面积的函数,只需创建新的图形类并实现calculateArea
方法即可。
这种使用多态的方式让代码更具扩展性和可维护性,因为它将通用的操作和特定的实现解耦,使得系统更容易适应变化。