php 抽象方法抽象类

在PHP中,抽象方法和抽象类是两个不同的概念。抽象方法是指在抽象类中定义的方法,该方法没有具体的实现,只有方法签名,必须在子类中实现。抽象类是指至少有一个抽象方法的类,不能被实例化,只能被继承。

定义抽象类的语法如下:

abstract class ClassName {
  // 抽象方法
  abstract public function methodName();
}

在上面的代码中,使用abstract关键字定义了一个抽象类ClassName,其中定义了一个抽象方法methodName()。需要注意的是,抽象方法没有具体的实现,只有方法签名,并且需要使用abstract关键字进行定义。

抽象类不能被实例化,只能被继承。子类必须实现父类中的所有抽象方法,否则子类也必须是抽象类。示例如下:

abstract class Animal {
  abstract public function makeSound();
}
class Cat extends Animal {
  public function makeSound() {
    echo "Meow";
  }
}
$cat = new Cat();
$cat->makeSound(); // 输出 "Meow"

在上面的代码中,Animal是一个抽象类,其中定义了一个抽象方法makeSound()。然后,Cat是Animal的子类,必须实现makeSound()方法,否则会产生Fatal error错误。最后,创建了一个Cat类的实例$cat,并调用了makeSound()方法,输出了"Meow"。

抽象类中除了抽象方法之外,还可以包含普通方法和属性。在子类中,可以使用parent关键字来调用父类中的方法和属性,例如:

abstract class Animal {
  protected $name;
  public function __construct($name) {
    $this->name = $name;
  }
  abstract public function makeSound();
}
class Cat extends Animal {
  public function makeSound() {
    echo "Meow";
  }
  public function getName() {
    return parent::$name;
  }
}
$cat = new Cat("Kitty");
echo $cat->getName(); // 输出 "Kitty"

在上面的代码中,Animal类中定义了一个属性$name和一个构造函数__construct(),并在Cat类中使用parent::$name来访问父类Animal中的$name属性。

 
匿名

发表评论

匿名网友
:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:
确定