「PHPでオブジェクト指向入門12~サブクラスのメソッドはスーパークラスのメソッドを上書きできる(継承)~」の編集履歴(バックアップ)一覧はこちら
追加された行は緑色になります。
削除された行は赤色になります。
継承でどんなことが他にできるのかを考えていきます。11月10日記事
~
~
目次
#contents
~
~
----
~
*メソッドのオーバーライド
同じメソッド名がスーパークラスとサブクラスにあった場合、サブクラスの方のメソッド名の方に適用される(上書きされる)ことが起きます。
これをメソッドのオーバーライドといいます。今回Sportsメソッドというものをスーパークラスとサブクラスに作り、上書きされる現象を確認したいと思います。
~
~
*コード
**作る
Superclass.php
<?php
class Superclass{
public $sports = "サッカー";
public $name = "田中太郎";
public function Name(){
return "名前は{$this->name}です。";
}
public function Sports(){
return "スーパークラスのスポーツは{$this->sports}が登録されています。";
}
}
?>
Subclass.php
<?php
require ("Superclass.php");
class Subclass extends Superclass{
public $sports = "ラグビー";
public function Sports(){
return "サブクラスのスポーツは{$this->sports}が登録されています。。";
}
}
?>
なんでもいいよ.php
<?php
require_once ("../class/Subclass.php");
$c = new Subclass();
echo $c->Name();
echo "<br>";
echo $c->Sports();
?>
これでSubclassのラグビーのほうに上書きされていることを確認できると思います。
~
~
**Subclass.phpのSportsメソッドをコメントアウト
Subclass.php
<?php
require ("Superclass.php");
class Subclass extends Superclass{
public $sports = "ラグビー";
/* public function Sports(){
return "サブクラスのスポーツは{$this->sports}が登録されています。";
}*/
}
?>
これでSuperclassのサッカーの方に戻ることも確認できると思います。
~
~
*まとめ
名前のほうはスーパークラスのものを継承していますが、スポーツの方は上書きされています。
このようにメソッドを上書きできることをオーバーライドと言います。
~
~
以上
継承でどんなことが他にできるのかを考えていきます。11月10日記事
~
~
目次
#contents
~
~
----
~
*メソッドのオーバーライド
同じメソッド名がスーパークラス(親クラス、基底クラスとも呼ばれる)とサブクラスにあった場合、サブクラスの方のメソッド名の方に適用される(上書きされる)ことが起きます。
これをメソッドのオーバーライドといいます。今回Sportsメソッドというものをスーパークラスとサブクラスに作り、上書きされる現象を確認したいと思います。
~
~
*コード
**作る
Superclass.php
<?php
class Superclass{
public $sports = "サッカー";
public $name = "田中太郎";
public function Name(){
return "名前は{$this->name}です。";
}
public function Sports(){
return "スーパークラスのスポーツは{$this->sports}が登録されています。";
}
}
?>
Subclass.php
<?php
require ("Superclass.php");
class Subclass extends Superclass{
public $sports = "ラグビー";
public function Sports(){
return "サブクラスのスポーツは{$this->sports}が登録されています。。";
}
}
?>
なんでもいいよ.php
<?php
require_once ("../class/Subclass.php");
$c = new Subclass();
echo $c->Name();
echo "<br>";
echo $c->Sports();
?>
これでSubclassのラグビーのほうに上書きされていることを確認できると思います。
~
~
**Subclass.phpのSportsメソッドをコメントアウト
Subclass.php
<?php
require ("Superclass.php");
class Subclass extends Superclass{
public $sports = "ラグビー";
/* public function Sports(){
return "サブクラスのスポーツは{$this->sports}が登録されています。";
}*/
}
?>
これでSuperclassのサッカーの方に戻ることも確認できると思います。
~
~
*まとめ
名前のほうはスーパークラスのものを継承していますが、スポーツの方は上書きされています。
このようにメソッドを上書きできることをオーバーライドと言います。
~
~
以上