はじめに
オブジェクト指向プログラミングを学習している中で、abstract宣言について学んだため備忘録。
抽象クラス(abstract)
- 抽象クラスはクラスではあるが、直接インスタンスを生成することができない。
- クラスの継承をして使われる。=>開発のルールを作ることができる
- 抽象クラスの中でabstract宣言されたメソッドは、継承された子クラス内で必ずそのメソッドを使わなければならない。
- クラスで使うときは普通の継承のように
extends
を使う。 - アクセス修飾子は、
public
とprotected
のみ使用可能。
コードを書いてみる。
categoryAbstract.php
abstract class CategoryAbstract
{
public function echoAnimal() {
echo '動物です';
}
abstract function echoPlant();
}
// CategoryAbstractを継承
class Category extends CategoryAbstract
{
public function echoAnimal() {
echo '動物です';
}
public function echoPlant() {
echo '植物です';
}
}
$category = new Category();
$category->echoAnimal(); //動物です
$category->echoPlant(); //植物です
$categoryAbstract = new CategoryAbstract();
$categoryAbstract->echoAnimal(); //抽象クラスはインスタンス化できないためエラー
書き方の基本ルール
①抽象クラスのabstractと宣言されているちゅうsyメソッド内に処理を書くことはできない。
下記のように親クラスであるabstract宣言
された抽象メソッド内に処理を書くとエラーとなる。
.php
abstract class CategoryAbstract {
public function echoAnimal() {
echo '動物です'; //一般的な関数の宣言のため問題なし
}
abstract function echoPlant() {
echo '植物です'; //抽象メソッドに処理を書いているためエラー
}
②抽象クラスを継承した子クラスでは、親クラスでabstract宣言されたメソッドは必ず使われなければならない。
下記のように子クラスのメソッドをコメントアウトするとエラーとなる。
.php
class Category extends CategoryAbstract{
public function echoAnimal() {
echo '動物です';
}
//public function echoPlant() {
// echo '植物です'; //親クラスでabstract宣言されているため、子クラスで書かれていないとエラー
//}
}