「継承される変数」(2005/08/28 (日) 06:01:18) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
<font size=
"2"> 「反響がないような、なぜかツクーラーから反響があるようなよく分からない講座。<br>
てか、ただのTonyu資料集。<br>
本日のお題は継承される変数についてです。<br>
<br>
通常、継承が行われた時には<b>先祖代々のメソッド</b>と<b>変数</b>が<b>全て引き継がれ</b>ます。<br>
この受け継がれるというのは、<b>変数内のデータまで受け継がれる</b>ということでは<b>ありません</b>。<br>
形としては、その<b>オブジェクトに書かれたもの</b>として扱われます。<br>
どういうことかというと、<b>全ての変数にはnull値が代入</b>される。そして<b>全てのメソッドは未実行の状態</b>で用意されるわけです。<br>
<br>
さてと…分かりづらい説明で申し訳ありませんね。<br>
メソッドの継承についてご説明しましょう。<br>
ここに一つのオブジェクトがあります。<br>
//親クラス.tonyu<br></font> <font color="#660000" size="2">extends
SpriteChar;<br>
function 関数1() { //「関数1」というメソッドの宣言<br>
}<br>
while(1) {<br>
update();<br>
}</font><font size="2"><br>
<br>
//子クラス.tonyu<br></font> <font color="#000000" size="-1"><font color=
"#660000" size="2">extends 親クラス;
//「親クラス」(上に書いているやつ)を継承してます<br>
while(1) {<br>
</font><font color="#0000FF" size="2">関数1()</font><font color=
"#660000" size="2">;<br>
update();<br>
}<br>
<br></font> さてと…。<br>
分かりますか?^^;<br>
大事なことは一つだけ。</font><font color="#0000FF" size=
"-1">青色</font><font color="#000000" size=
"-1">で書かれているところです。<br>
よーく見てくださいね。<br>
子クラスのどこに「関数1()」だなんてメソッドが書かれていますか!?<br>
<br>
まあ…継承を使おうって人ならこれぐらい理解できますよね?<br>
<b>「子クラス」で使われているメソッド「関数1()」とは「親クラス」から継承</b>されたものです。<br>
継承をすると、このように子クラスで<b>同じことを書く必要がなく</b>なります。<br>
このようにコンパクトに書くのが現代の流行です。ついでに、お手軽です。ぜひ習得しましょう!!(笑)<br>
<br>
さて、もう一つの例を見て見ましょう。<br>
今度はメソッドではなく変数の継承についてです。ってか、今日の講座はこっちがメインなんですよね^^;<br>
まず確認しておきます。<b>継承されているかどうかを調べる</b>のには<b>オブジェクトインスペクタ</b>を見ます。簡単ですね?<br>
<font size="2">//親クラス.tonyu<br></font> <font color="#660000" size=
"2">extends SpriteChar;<br>
function 関数1(g1,_g2) {
//「関数1」というメソッドの宣言。引数にローカル変数g1と_g2を指定<br>
var g3;<br>
}<br>
g4;//オブジェクト変数g4の宣言<br>
g5=20;//オブジェクト変数g5の宣言兼数字の20の代入<br>
_g6;//オブジェクト変数_g6の宣言<br>
while(1) {<br>
update();<br>
}</font><font size="2"><br>
<br>
//子クラス.tonyu<br></font> <font color="#660000" size="2">extends
親クラス;
//「親クラス」(上に書いているやつ)を継承してます<br>
while(1) {<br>
print(g1);<br>
print(_g2);<br>
print(g3);<br>
print(g4);<br>
print(g5);<br>
print(_g6);<br>
update();<br>
}<br>
<br>
//結果としてコンソールウインドーに現れる値<br>
変数g1<br>
変数_g2<br>
変数g3<br>
変数g4<br>
変数g5<br>
変数_g6<br>
<br></font> さて、今度のプログラムは分かりますか?<br>
結果として、「子オブジェクト」では全ての変数が検出されませんでした。(null値が入っていれば、「null」と表示される)とはいえ、ちゃんと継承
は行われているんです^^; いったいぜんたい、このとき変数には何が入っているんだ…?(オイ)<br>
まずは継承される変数とされない変数についてまとめておきましょう。<br>
<br></font> <font color="#FF0000" size="-1">継承される変数<br>
・オブジェクト変数(null値で継承される)<br>
<br>
継承されない変数<br>
・「 _
」(アンダーライン)が変数名の前についている不可視変数(オブジェクトインスペクタに表示されない)<br>
・メソッド内専用のローカル変数</font><font color="#000000"
size="-1"><br>
<br>
「親クラス」ではメソッドの引数として<b>ローカル変数</b>g1と_g2を宣言しています。<br>
ここがまず第一の大事なポイント。<br>
<b>引数に使われた変数はローカル変数として扱われる</b>=<b>継承されない</b><br>
<br>
さて、次に<i>var</i>を使って<b>ローカル変数</b>g3を宣言しています。<br>
</font> <b><font color="#000000" size=
"-1"><i>var</i>を使おうがアイスバーを使おうがローカル変数は継承されない<br>
<br></font></b> <font color="#000000" size=
"-1">えっと、次は何かな? <b>オブジェクト変数</b>g4ですね。<br>
これは<b>継承されています</b>。ただし、オブジェクト変数はnull値で継承されるためにコンソールには不本意ながら、他の継承されていない変数と同じように表示されるだけです。オブジェクトインスペクタを見ると、ちゃんと継承されていることが分かります。<br>
<br>
<b>オブジェクト変数</b>g5。<br>
以下同文。null値で継承されます。<br>
<br>
<b>オブジェクト変数</b>_g6。<br>
<b>継承されません</b>。正確には継承されているのかもしれませんが、確認できません。オブジェクトインスペクタにも表示されず、また、コンソールで確かめようにも検出されないのでどうしようもないわけです。素直に、継承されないことにしておきましょう。<br>
<br>
えっと…ワカリマシタか?^^;<br>
<b>メソッド</b>と、<b>オブジェクト変数</b>だけが<b>継承される</b>という結論でした。<br>
参考:HELP>命令リファレンス>「文法」最上段の「変数」</font>
表示オプション
横に並べて表示:
変化行の前後のみ表示: