抽象類別(Abstract Class)

抽象類別可以做的事

  • 可以宣告屬性(attribute)成員
  • 可以擁有常數(const)成員
  • 可以實作方法內容
  • 子類別只可以繼承一個抽象類別

可以宣告屬性(attribute)成員

/**
 * 人(抽象類別)
 */
abstract class Person
{
  // 人抽象類別的個人屬性
  public $height;     // 身高是公開的
  protected $weight;  // 體重是保護的
  private $age;       // 年齡是秘密

  // 人抽象類別共有的靜態屬性
  public static $INTEREST;        // 興趣是公開的
  protected static $APPEARANCE;   // 外表是保護的
  private static $CHARACTER;      // 性格是秘密的
}

可以擁有常數(const)成員

/**
 * 人(抽象類別)
 */
abstract class Person
{
    // 可以擁有常數(const)成員
    const IS_AGE_PUBLIC = false;    // 年齡是絕不對外公開的
}

可以實作方法內容

/**
 * 人(抽象類別)
 */
abstract class Person
{
    // 可以實作方法內容

    /**
     * 吃飯
     */
    public function eat()
    {
        // 吃吃吃~
    }

    /**
     * 睡覺
     */
    public function sleep()
    {
        // 睡睡睡~
    }
}

子類別只可以繼承一個抽象類別

抽象類別

/**
 * 人(父類別)
 */
abstract class Person
{
  /**
   * 吃飯
   */
  public function eat()
  {
      // 吃吃吃~
  }

  /**
   * 睡覺
   */
  public function sleep()
  {
      // 睡睡睡~
  }
}

子類別繼承抽象類別

/**
 * 女生類別
 */
class Girl extends Person
{
}
// 台灣女孩
$taiwan_girl = new Girl();

// 台灣女孩「吃吃吃~」
$taiwan_girl->eat();

// 台灣女孩「睡睡睡~」
$taiwan_girl->sleep();

抽象類別不可以做的事

  • 不可實作抽象方法
  • 不可以實例化(instance)

不可實作抽象方法

/**
 * 人(父類別)
 */
abstract class Person
{
  // 不可實作抽象方法

  /**
   * 吃飯抽象方法(無法實作)
   * ✘✘✘✘✘✘✘ ◢▆▅▄▃-崩╰(〒皿〒)╯潰-▃▄▅▆◣ ✘✘✘✘✘✘✘
   */
  abstract public function eat()
  {
      // 吃吃吃~
  }

  /**
   * 睡覺抽象方法(無法實作)
   * ✘✘✘✘✘✘✘ ◢▆▅▄▃-崩╰(〒皿〒)╯潰-▃▄▅▆◣ ✘✘✘✘✘✘✘
   */
  abstract public function sleep()
  {
      // 睡睡睡~
  }
}

不可以實例化(instance)

/**
 * 人(父類別)
 */
abstract class Person
{
  /**
   * 吃飯
   */
  public function eat()
  {
      // 吃吃吃~
  }

  /**
   * 睡覺
   */
  public function sleep()
  {
      // 睡睡睡~
  }
}

// 不可以實例化(instance)
// ✘✘✘✘✘✘✘ ◢▆▅▄▃-崩╰(〒皿〒)╯潰-▃▄▅▆◣ ✘✘✘✘✘✘✘
$taiwan_person = new Person();

抽象類別(Abstract Class)使用時機

當「多個類別(Class)」之間有共同的方法(function)或屬性(attribute)時,可以將這些共用的地方寫成「抽象類別(Abstract Class)」,讓其他的「子類別(Class)」去繼承

results matching ""

    No results matching ""