PHP 抽象类

1、抽象类指的是包含抽象方法的类,而抽象方法是通过 abstract 关键字修饰的方法,抽象方法只是一个方法声明,不能有具体实现: abstract public function drive();

2、抽象类本身不能被实例化,只能被子类继承,继承了抽象类的子类必须实现父类中的抽象方法,否则会报错。

你还可以从抽象父类继承正常的属性和方法:

<?php

abstract class Car
{
    protected $brand;

    /**
     * Car constructor.
     * @param $brand
     */
    public function __construct($brand)
    {
        $this->brand = $brand;
    }

    abstract public function drive();
}

class LynkCo01 extends Car
{
    public function __construct()
    {
        $this->brand = '领克01';
        parent::__construct($this->brand);
    }

    public function drive()
    {
        echo "启动{$this->brand}汽车" . PHP_EOL;
    }
}

class LynkCo03 extends Car
{
    public function __construct()
    {
        $this->brand = '领克03';
        parent::__construct($this->brand);
    }

    public function drive()
    {
        echo "提示:手动档需要踩离合器" . PHP_EOL;
        echo "启动{$this->brand}汽车" . PHP_EOL;
    }
}

接口

interface Fruit
{
    public function color(); //继承接口的类,必须要实现的方法
}

class Apple implements Fruit
{
    public $color;

    public function __construct($color)
    {
        $this->color = $color;
    }

    public function color()
    {
        return $this->color;
    }
}
接口类和抽象类的区别
抽象类 :

-1.类中至少有一个抽象方法 -2.前面加abstract

接口:

-1.成员属性为常量const -2.前面不用加abstract -3.类中全部为抽象方法,接口抽象方法为public

接口类和抽象类 共同点:

-1.本身不能被实例化,必须继承或者引用 -2.抽象类的抽象方法和接口里的方法,都不能有方法体,且子类必须要实现

接口类和抽象类 不同点:
  1. 抽象类用abstract关键字在类前声明,且有class声明为类,接口是用interface来声明,但不能用class来声明,因为接口不是类。
  2. 抽象类的抽象方法一定要用abstract来声明,而接口则不需要
  3. 子类继承抽象类使用extends关键词、子类继承接口类则是用implements
  4. 抽象类里可以有普通方法和抽象方法(有方法体)、接口里都是抽象方法

zed
请先登录后发表评论
  • latest comments
  • 总共0条评论