※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

 「反響がないような、なぜかツクーラーから反響があるようなよく分からない講座。
てか、ただのTonyu資料集。
本日のお題は継承される変数についてです。

 通常、継承が行われた時には先祖代々のメソッド変数全て引き継がれます。
この受け継がれるというのは、変数内のデータまで受け継がれるということではありません
形としては、そのオブジェクトに書かれたものとして扱われます。
どういうことかというと、全ての変数にはnull値が代入される。そして全てのメソッドは未実行の状態で用意されるわけです。

さてと…分かりづらい説明で申し訳ありませんね。
メソッドの継承についてご説明しましょう。
ここに一つのオブジェクトがあります。
//親クラス.tonyu
extends SpriteChar;
function 関数1() { //「関数1」というメソッドの宣言
}
while(1) {
 update();
}


//子クラス.tonyu
extends 親クラス; //「親クラス」(上に書いているやつ)を継承してます
while(1) {
 
関数1();
 update();
}

さてと…。
分かりますか?^^;
大事なことは一つだけ。
青色で書かれているところです。
よーく見てくださいね。
子クラスのどこに「関数1()」だなんてメソッドが書かれていますか!?

まあ…継承を使おうって人ならこれぐらい理解できますよね?
「子クラス」で使われているメソッド「関数1()」とは「親クラス」から継承されたものです。
継承をすると、このように子クラスで同じことを書く必要がなくなります。
このようにコンパクトに書くのが現代の流行です。ついでに、お手軽です。ぜひ習得しましょう!!(笑)

さて、もう一つの例を見て見ましょう。
今度はメソッドではなく変数の継承についてです。ってか、今日の講座はこっちがメインなんですよね^^;
まず確認しておきます。継承されているかどうかを調べるのにはオブジェクトインスペクタを見ます。簡単ですね?
//親クラス.tonyu
extends SpriteChar;
function 関数1(g1,_g2) { //「関数1」というメソッドの宣言。引数にローカル変数g1と_g2を指定
 var g3;
}
g4;//オブジェクト変数g4の宣言
g5=20;//オブジェクト変数g5の宣言兼数字の20の代入
_g6;//オブジェクト変数_g6の宣言
while(1) {
 update();
}


//子クラス.tonyu
extends 親クラス; //「親クラス」(上に書いているやつ)を継承してます
while(1) {
 print(g1);
 print(_g2);
 print(g3);
 print(g4);
 print(g5);
 print(_g6);
 update();
}

//結果としてコンソールウインドーに現れる値
変数g1
変数_g2
変数g3
変数g4
変数g5
変数_g6

さて、今度のプログラムは分かりますか?
結果として、「子オブジェクト」では全ての変数が検出されませんでした。(null値が入っていれば、「null」と表示される)とはいえ、ちゃんと継承 は行われているんです^^; いったいぜんたい、このとき変数には何が入っているんだ…?(オイ)
まずは継承される変数とされない変数についてまとめておきましょう。

継承される変数
 ・オブジェクト変数(null値で継承される)

継承されない変数
 ・「 _ 」(アンダーライン)が変数名の前についている不可視変数(オブジェクトインスペクタに表示されない)
 ・メソッド内専用のローカル変数


「親クラス」ではメソッドの引数としてローカル変数g1と_g2を宣言しています。
ここがまず第一の大事なポイント。
引数に使われた変数はローカル変数として扱われる=継承されない

さて、次にvarを使ってローカル変数g3を宣言しています。
varを使おうがアイスバーを使おうがローカル変数は継承されない

えっと、次は何かな? オブジェクト変数g4ですね。
これは継承されています。ただし、オブジェクト変数はnull値で継承されるためにコンソールには不本意ながら、他の継承されていない変数と同じように表示されるだけです。オブジェクトインスペクタを見ると、ちゃんと継承されていることが分かります。

オブジェクト変数g5。
以下同文。null値で継承されます。

オブジェクト変数_g6。
継承されません。正確には継承されているのかもしれませんが、確認できません。オブジェクトインスペクタにも表示されず、また、コンソールで確かめようにも検出されないのでどうしようもないわけです。素直に、継承されないことにしておきましょう。

えっと…ワカリマシタか?^^;
メソッドと、オブジェクト変数だけが継承されるという結論でした。
参考:HELP>命令リファレンス>「文法」最上段の「変数」