![見出し画像](https://assets.st-note.com/production/uploads/images/115673209/rectangle_large_type_2_5eae556eddcf5d30501df7685d43f6e6.jpeg?width=800)
「継承」と「オーバーライド」について
継承とは
継承とは、クラスが持っているメソッド(関数)やプロパティ(変数)を別のクラスに引き継がせること。
継承元のクラスを親クラス、継承先のクラスを子クラスという。
子クラスを作成するには「extends」を使用する。次のように「extends」の前に子クラス名、後に親クラス名を指定する。
class 子クラス extends 親クラス {
class NewCar extends Basecar {
実際の使用例がこちら↓
//親クラス
class BaseClass {
public function echoBase() {
echo "親クラスです";
}
}
//子クラス
class ChildClass extends BaseClass {
public function echoChild() {
echo "子クラスです";
}
}
$child = new ChildClass();
$child->echoBase();
$child->echoChild();
//出力結果
親クラスです
子クラスです
継承を使うメリット
同じ内容のソースコードを色々な箇所に書くと、修正する際に複数の個所を直す必要があり保守性が悪くなる。
そのため、共通的な部品は共通機能として管理するか継承して管理する。
(例えば、色々な個所で使う共通的な部品であれば共通機能、車クラスの共通部品であれば車の親クラスで管理など。)
↓例えば次のような新車クラスと中古クラスがあった場合
//新車クラス
class NewCar {
const MANUFACTURER = "○○自動車";
public function echoCar($price) {
echo "製造元は. self::MANUFACTURER.";
echo "販売価格は$price 円";
}
public function echoNewCar($price) {
echo "新車です";
$this->echoCar($price);
}
}
//中古クラス
class OldCar {
const MANUFACTURER = "○○自動車";
public function echoCar($price) {
echo "製造元は. self::MANUFACTURER.";
echo "販売価格は$price 円";
}
public function echoOldCar($price) {
echo "中古車です";
$this->echoCar($price);
}
}
$newCar = new NewCar();
$newCar->echoNewCar("100万円");
$oldCar = new OldCar();
$oldCar->echoOldCar("50万円");
//以下の部分は全く同じ内容が二度書かれている。
const MANUFACTURER = "○○自動車";
public function echoCar($price) {
echo "製造元は. self::MANUFACTURER.";
echo "販売価格は$price 円";
}
↓継承を使うと
//車の基本クラス
class BaseCar {
const MANUFACTURER = "○○自動車";
public function echoCar($price) {
echo "製造元は. self::MANUFACTURER.";
echo "販売価格は$price 円";
}
}
//新車クラス
class NewCar extends BaseCar {
public function echoNewCar($price) {
echo "新車です";
$this->echoCar($price);
}
}
//中古クラス
class OldCar extends BaseCar {
public function echoOldCar($price) {
echo "中古車です";
$this->echoCar($price);
}
}
$newCar = new NewCar();
$newCar->echoNewCar("100万円");
$oldCar = new OldCar();
$oldCar->echoOldCar("50万円");
オーバーライドとは
オーバーライドとは、継承元である親クラスで定義されているメソッドを子クラスで書き換えること。
親クラスにあるメソッドと、同じ名前、同じ引数のメソッドを子クラスに記述することでオーバーライドすることができる。
//親クラス
class BaseClass {
public function echoItem() {
echo "親クラスです。";
}
}
//子クラス
class ChildClass extends BaseClass {
public function echoItem() {
echo "子クラスです";
}
}
$child = new ChildClass();
$child->echoItem();
//親クラスです→子クラスですに書き換えられる。
子クラスです。
この記事が気に入ったらサポートをしてみませんか?