YouTube

Got a YouTube account?

New: enable viewer-created translations and captions on your YouTube channel!

Japanese subtitles

← Inheriting Behavior

Get Embed Code
13 Languages

Showing Revision 20 created 10/24/2015 by Takashi Ota.

  1. ちょっとだけ JustJava アプリに戻りましょう
  2. MainActivity クラスの
    displayMessage メソッドを見ましょう
  3. そのものはここから始まって
    少し分かりやすく書いてあります
  4. 作りかけの変数 orderSummaryTextView が
    あるのが分かりますね
  5. この変数のデータ型は
    TextView でした
  6. ここの部分はまだ
    理解していないんですけどね
  7. 次の行は TextView オブジェクトの
    メソッドを呼んでいます
  8. 今回は上に書いてある変数名と
    同じものを使います
  9. なので orderSummaryTextView.setText を
    呼びます
  10. それから メソッドの入力として
    文字列を渡します
  11. この message という文字列は
    元々は displayMessage メソッドの入力でした
  12. ここで まだ理解していない
    この部分を詳しく見ていきましょう
  13. findViewById とあるのは
    メソッド呼び出しのようです
  14. これはカッコ囲みの
    入力引数っぽい箇所の前にあるからです
  15. しかし奇妙なことに このメソッドは
    このクラス内のどこにも見当たりません
  16. この名前をダブルクリックして
    Command + F もしくは
  17. Windows で Ctrl + F を押すと
    ファイル内を検索できます
  18. 2つだけ findViewById を見つけました
  19. 2つとも同じように使われています
  20. 他に findViewById という
    メソッドはないですね
  21. そういえば 前に MainActivity クラスで
  22. setContentView を呼び出す場面に
    出会いましたが
  23. ファイル内検索をしても今回同様
    MainActivity 内には見つかりませんでした
  24. では そのメソッド定義は
    どこでしょうか?
  25. まず MainActivity は
    実はとても短いファイルです
  26. たった約 90 行です
  27. しかし 実はそこには目に見えない
    より多くのクラスがあるのです
  28. ここに extends AppCompatActivity を
    呼んでいるコードがあります
  29. これは MainActivity が
    AppCompatActivity クラス内の
  30. 機能を拡張したものだという意味です
  31. あなたの環境でここに ActionBarActibity と
    あったとしても大丈夫です
  32. バージョンが古いだけです
  33. 使うべき最新バージョンは
    AppCompatActivity ですが
  34. AppCompatActivity には―
  35. 古い Android デバイスをサポートする
    後方互換性があります
  36. AppCompatActivity は
    Android サポートライブラリの一部です
  37. それにより 古い Android デバイスを
    使っていたとしても
  38. 最新のユーザーインターフェイスを使えます
  39. AppCompatActivity クラスを
    拡張することによって
  40. MainActivity 内の
    全ての機能 ステート メソッドを
  41. ここからタダで手に入れることができます
  42. AppCompatActivityから
    コピー&ペーストする必要はありません
  43. シンプルにクラスを拡張できます
  44. 興味があれば AppCompatActivity について
    検索で探しましょう
  45. AppCompatActivity クラスの
    リファレンスがあります
  46. Chrome 拡張機能を入れていれば
    ソースも見られます
  47. これが AppCompatActivity クラスが
    定義されたコードです
  48. 多くの機能がここにあるのが
    分かると思いますが
  49. ここで言いたいのは
    実装を理解する必要はありません
  50. 理解してもらいたいのは
    AppCompatActivity を拡張したら―
  51. 全ての機能をタダで手に入れられる
    ということです
  52. 高いレベルからは
    このように視覚化できます
  53. これは MainActivity の
    クラス定義です
  54. いくつかのメソッドの定義はここです
  55. AppCompatActivity を拡張したら
    このステートにアクセスしたり
  56. AppCompatActivity の
    メソッドにアクセスもできます
  57. 物理的に MainActivity クラスに
    追加しているわけではありませんが
  58. ここにあると考えてください
  59. この中にあるステートもメソッドも
    参照できますからね
  60. 以上が setContentView や
    findViewById などを
  61. どうやって参照しているかです
  62. これらのメソッドは継承されているので
    MainActivity の中で定義しません
  63. MainActivity は実機上の
    画面で表示されますが
  64. MainActivity 内でそのコードは書いていません
    同様に継承しているからです
  65. ステートやメソッドを AppCompatActivity から
    クラスに直接は持ってきませんが
  66. それらがそこにあると分かりましたし
    参照することも可能です
  67. 継承といえば 長所と短所があります
  68. ある時は 動作をそのまま
    継承したいでしょうし
  69. 別の時には
    少し変えたいかもしれません
  70. もし 継承したクラスから
    いくつか動作を変えたいなら
  71. メソッド上書きができます
  72. @override をメソッドの最初に加えれば
  73. AppCompatActivity 内のメソッドではなく
  74. 代わりにここに定義した方を使いたいのだと
    コンピューターは理解します
  75. これは難解ですし
    たくさん経験しないと分かりません
  76. 実は 私たちは 既に
    AppCompatActivity クラスから
  77. 上書きされたメソッドの例を見ています
  78. onCreate メソッド がそれです
  79. MainActivity 内で onCreate メソッドを
    上書きすることで
  80. メソッドが呼ばれたときに動いてほしい
    自分たちの実装を具体的に指定してます
  81. 今すぐ理解できなくても心配しないでください
  82. オブジェクト指向プログラミングの概念を
    かいつまんで紹介しているだけです
  83. このことについて
    問題が喉に引っかかっていたり
  84. 全てを把握するには関連文献を
    もっと読む必要があることは想定内です
  85. クラス階層図を描いて―
  86. MainActivity クラスと AppCompatActivity クラスの
    関係を視覚化するやり方もあります
  87. これはビュー階層図とは違います
  88. ビュー階層図は 画面上のビューを
    ツリー状で表しますが
  89. クラス階層図は異なる Java クラス間の
    関係性を示します
  90. AppCompatActivity は
    スーパークラスとなります
  91. MainActivity は
    AppCompatActivity から拡張したので
  92. サブクラスだとみなされます
  93. クラス定義を見る時はいつでも
  94. 拡張元は全てスーパークラスと呼ばれます
  95. こちらがサブクラスになります
  96. もし あなたが もう1つ―
  97. DetailActivity なるものを作って
    AppCompatActivity を拡張したなら
  98. これがサブクラスになり
    これはスーパークラスです
  99. ここにもう1つ Java クラス継承の
    例があります
  100. ここでは TextView も
    ImageView も Button も
  101. 全て共通要素を
    持っていると思ってください
  102. 全てのビューは スクリーン上に
    幅と高さを持ちます
  103. まだ学んでいませんが
    これらには可視性ステートもあるのです
  104. これらは全て可視状態にも
    不可視状態にもできるのです
  105. 他にもこれらに共通するものが
    数プロパティあります
  106. この TextView クラスにある
    プロパティのコードを書き出して
  107. ImageView や Button の
    クラスにコピーする代わりに
  108. もう少しスマートなやり方があります
  109. まず View クラスを作って―
  110. 全てのビューに共通するプロパティを抜き出し
    この View クラスの中に置きます
  111. そうすればコードを書くのは一度で済みます
  112. では どうやってこの
    TextView クラスと View クラスの間に
  113. つながりを作るのでしょうか?
  114. 継承を考えているのなら
    その考えで合っています
  115. TextView.java ファイルの中に
    TextView クラスを定義します
  116. こうして View クラスから
    データとメソッドを全て継承します
  117. すると この TextView クラスと
    同じコードは入れなくてもよくなります
  118. その機能の一部は 既に
    View クラスの中にあるからです
  119. 同じことが ImageView など
    下位のクラスにも言えます
  120. コードをたくさん書く必要はありません
  121. これらのファイルでは
    ImageView.java と View.java を比べて
  122. 違う箇所のみを書けばよいのです
  123. 差分を明確にする意味では―
  124. ImageView クラスには View と
    違う部分だけが入ってなくてはなりません
  125. もし View 内の特定の動作を
    継承したくないなら
  126. 書き換えた動作を ImageView に書いたり
    他のクラス内に書いたりできます
  127. 用語を復習しましょう
  128. この場合 TextView はサブクラスで
    View がスーパークラスです
  129. TextView クラスの
    ドキュメントに戻って
  130. 私たちは今 ここの部分を理解しました
  131. TextView が View を拡張する とあります
  132. 今なら 意味が分かります
  133. ステートとメソッドを
    View クラスから継承している―
  134. ということですね
  135. ここにはクラス階層図があります
  136. これは TextView クラスが View クラスから
    継承されている
    ことを示しています
  137. さらに View クラスは
    Object クラスから継承しています
  138. もっと探索すれば
    他のクラスも発見できます
  139. EditText クラスは TextView クラスから
    拡張している
    といった具合に
  140. これは動作を
    TextView クラスから持ってきて
  141. 機能を少し加えたものです
  142. つまり EditText は TextView から
    拡張しています
  143. TextView は View から拡張していて
    View は Object から拡張してます
  144. そして これがそのクラス階層図です
  145. たくさんありますので
    何時間でも見ていられますが
  146. 今回は TextView ドキュメントの
    ページの紹介だけで ご勘弁を
  147. ここからは setVisibility のメソッドを
    ご紹介したいと思います
  148. TextView クラス内に
    setVisibility 用のメソッドがあります
  149. これはビューの可視と不可視を
    切り替えるものです
  150. このメソッドをクリックすると
    View クラスに飛びます
  151. そして これはメソッドの説明です
  152. TextView オブジェクトは setVisibility メソッドを
    伴っているのが分かります
  153. そして それは View クラスから
    継承されたものです
  154. この機能は View クラスから
    タダで得たものです
  155. さて 新しい概念をたくさん見てきましたね
  156. これは通常ならコンピューター科学の
    コースで 1学期間かけて行うものです
  157. これから 少し練習をします
  158. あなたにとって 点と点を
    つなぐことになると良いのですが
  159. しかし これらの概念を
    完全に把握するには
  160. より多くの時間と練習が必要なことは
    知っておいてください
  161. OK 最初の練習です
    新たな Android アプリを作ってください
  162. ここで JustJava アプリの
    まとめをしておきましょう
  163. 作り終わったら
    そのアプリを実行してください
  164. アプリができたら
    MainActivity ファイルを見てください
  165. MainActivity ファイルは
    AppCompatActivity から拡張しています
  166. Android Studio のバージョンによっては
    MainActivity が ActionBarActivity から
  167. 拡張しているかもしれませんが
    それでも構いません
  168. それは AppCompatActivity の
    古いバージョンなだけです
  169. MainActivity の onCreate メソッド上書きを
    取り除きながら
  170. AppCompatActivity クラスの onCreate の
    挙動に戻りましょう
  171. 今 このメソッドがあるため
  172. MainActivity 内では
    onCreate メソッドは異なる挙動にしたい
  173. となっています
  174. なので これを取り除き
  175. AppCompatActivity クラスにある
    元の動作に戻してください
  176. アプリを実行したら―
  177. 最初にアプリを実行した時と
    何が違うか気づきましたか?
  178. ここに答えを書きましょう