YouTube

Got a YouTube account?

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

Vietnamese subtitles

← Inheriting Behavior

Get Embed Code
13 Languages

Showing Revision 1 created 10/15/2015 by Darren Bridenbeck (Amara Staff).

  1. Quay lại ứng dụng JustJava một chút.
  2. Xem lớp MainActivity,
    phương thức displayMessage.
  3. Mọi thứ bắt đầu rõ ràng hơn
    một chút ở đây.
  4. Chúng ta thấy là đã có một biến
    tên là orderSummaryTextView.
  5. Kiểu dữ liệu của biến này là TextView.
  6. Nhưng chúng ta vẫn chưa hiểu phần này.
  7. Ở dòng tiếp theo, ta gọi một
    Phương thức cho đối tượng TextView này.
  8. Ta dùng cùng một tên biến
    như đã khai báo trên này.
  9. Ta gọi orderSummaryTextView.setText.
  10. Rồi đặt một chuỗi làm đầu vào
    cho Phương thức này.
  11. Chuỗi thông điệp này vốn là
    một tham số đầu vào
  12. cho Phương thức displayMessage.
  13. Giờ hãy xem kỹ phần mã này,
    chỗ chúng ta còn chưa hiểu.
  14. Có vẻ findViewById
    là một lệnh gọi Phương thức.
  15. Vì nó nằm trước các ngoặc đơn này với
    tóm tắt giá trị đầu vào.
  16. Nhưng kỳ lạ là Phương thức này không
    được định nghĩa ở chỗ nào trong Lớp.
  17. Nếu tôi nhấp đôi vào tên này
    và nhấn Cmd F, hoặc
  18. Ctrl F nếu bạn dùng Windows,
    ta có thể thử tìm trong file này.
  19. Tôi chỉ thấy hai sự kiện
    có findViewById, và
  20. chúng được dùng tương tự nhau.
  21. Nhưng tôi không thấy Phương thức nào
    tên là findViewById.
  22. Nói đến chuyện này,
    trước đây trong lớp MainActivity,
  23. ta cũng thấy một lệnh gọi
    setContentView, nhưng nếu tìm kiếm
  24. trong file, thì nó cũng không được
    định nghĩa trong MainActivity.
  25. Vậy những Phương thức này
    được định nghĩa ở đâu?
  26. MainActivity thật ra là
    một file rất ngắn.
  27. Nó chỉ có khoảng 90 dòng,
  28. nhưng thật ra trong Lớp này
    còn có nhiều hơn thế.
  29. Phần mã nói rằng,
    mở rộng AppCompatActivity.
  30. Điều này tức là MainActivity
    là phần mở rộng
  31. của phần chức năng
    trong lớp AppCompatActivity.
  32. Trên máy tính, nếu bạn thấy
    ActionBarActivity ở đây thì không sao,
  33. đó chỉ là một phiên bản cũ hơn.
  34. Phiên bản mới nhất bạn nên dùng
    là AppCompatActivity.
  35. AppCompatActivity hỗ trợ
    tương thích ngược cho chúng ta
  36. trên các thiết bị Android cũ hơn.
  37. AppCompatActivity là một phần của
    thư viện hỗ trợ Android.
  38. Nó cho phép ta dùng những tính năng
    giao diện mới nhất của Android,
  39. trong khi vẫn làm việc
    trên các thiết bị Android cũ hơn.
  40. Bằng cách mở rộng
    lớp AppCompatActivity.
  41. Chúng ta có tất cả tính năng,
    tất cả trạng thái và
  42. các Phương thức trong MainActivity
    một cách miễn phí.
  43. Ta không phải sao chép và
    dán dòng mã nào từ đây.
  44. Chúng ta chỉ đơn giản là
    mở rộng Lớp này.
  45. Nếu bạn thích,
  46. có thể tìm hêm thông tin về
    AppCompatActivity bằng Google.
  47. Đây là tài liệu tham khảo
    cho lớp AppCompatActivity.
  48. Vì tôi có tiện ích mở rộng
    được cài sẵn trên Chrome,
  49. tôi có thể xem được mã nguồn.
  50. Và đây là phần mã chỗ
    lớp AppCompatActivity được định nghĩa.
  51. Bạn có thể thấy
    rất nhiều tính năng ở đây,
  52. vấn đề là bạn không cần hiểu
    chúng thực hiện như thế nào.
  53. Bạn chỉ cần biết là
    khi mở rộng AppCompatActivity,
  54. bạn có tất cả
    những tính năng này miễn phí.
  55. Ở cấp độ cao, bạn có thể
    hình tượng hóa thế này.
  56. Đây là định nghĩa Lớp
    cho MainActivity.
  57. Và có vài Phương thức
    được định nghĩa ở đây.
  58. Khi bạn mở rộng AppCompatActivity,
    ta có thể truy cập các trạng thái
  59. và các Phương thức từ AppCompatActivity.
  60. Giờ chúng chưa được tự thêm vào
    lớp MainActivity, nhưng
  61. bạn có thể hình dung là
    chúng có ở đó,
  62. vì bạn vẫn có thể tham chiếu
    các trạng thái và phương thức.
  63. Và đó là cách đoạn mã của ta có thể
    chỉ tới những thứ như setContentView
  64. hoặc findViewById.
  65. Vì thừa hưởng các Phương thức này, ta không
    thể định nghĩa chúng trong MainActivity.
  66. MainActivity được trình diễn
    trên màn hình của thiết bị, nhưng
  67. chúng ta không viết mã đó trong
    MainActivity, mà thừa hưởng chúng.
  68. Ta không có trạng thái và phương thức
    trực tiếp từ lớp AppCompatActivity,
  69. nhưng giờ ta đã biết rằng
    chúng ở đó và ta có thể chỉ dẫn đến.
  70. Nói về những thứ được thừa hưởng,
    trong việc này có cả mặt tốt và xấu.
  71. Đôi khi ta sẽ muốn
    thừa hưởng hành vi, nhưng
  72. có lần khác ta lại chỉ muốn
    chỉnh sửa một chút.
  73. Nếu bạn muốn thay đổi vài hành vi
    từ Lớp được thừa hưởng,
  74. bạn có thể ghi đè lên
    một số Phương thức nhất định.
  75. Bạn có thể thêm chữ @override ở trên cùng
    của Phương thức để máy tính biết rằng
  76. bạn không muốn dùng phiên bản của
    Phương thức từ lớp AppCompatActivity.
  77. Thay vào đó, bạn muốn
    tự định nghĩa phương thức này ở đây.
  78. Đây là một chủ đề về mẹo,
    và cần thực hành nhiều.
  79. Nhưng ta đã xem một ví dụ về
    ghi đè một Phương thức
  80. từ lớp AppCompatActivity.
  81. Và Phương thức đó là OnCreate.
  82. Bằng cách ghi đè phương thức OnCreate
    trong MainActivity, chúng ta chỉ rõ
  83. những gì cần thực hiện khi
    Phương thức đó được gọi.
  84. Đừng lo nếu bạn không hiểu chỗ này ngay.
  85. Tôi chỉ cho bạn một tóm tắt khái quát
    về các khái niệm của
  86. lập trình hướng đối tượng.
  87. Tôi cũng mong rằng các bạn
    vẫn còn nhiều câu hỏi.
  88. Và vẫn cần đọc thêm những chủ đề này
    để hiểu chúng
  89. một cách đầy đủ.
  90. Một cách khác để hình tượng hóa
    quan hệ giữa các lớp MainActivity
  91. và AppCompatActivity là vẽ
    Sơ đồ Hệ thống Lớp.
  92. Cái này khác với Sơ đồ Hệ thống Xem, vì
  93. Sơ đồ Hệ thống Xem thể hiện một cây
    những cảnh được thể hiện trên màn hình.
  94. Sơ đồ Hệ thống Lớp
    cho thấy mối quan hệ
  95. giữa các lớp Java khác nhau.
  96. Chúng ta có AppCompatActivity
    là Siêu lớp.
  97. Vì MainActivity mở rộng từ
    AppCompatActivity,
  98. nên nó là Phân lớp.
  99. Nên khi nào bạn thấy định nghĩa lớp này
    thì cái gốc mà nó mở rộng
  100. được gọi là Siêu lớp.
  101. Đây là Phân lớp.
  102. Nếu bạn tạo thêm một activity khác
    tên là DetailActivity và
  103. bạn mở rộng AppCompatActivity,
    nó sẽ là Phân lớp,
  104. và đây là Siêu lớp.
  105. Đây là một ví dụ khác
    về thừa hưởng lớp Java.
  106. Nếu bạn nghĩ về nó,
    TextView, ImageView,
  107. ButtonView, tất cả đều có
    những khía cạnh chung.
  108. Tất cả quang cảnh này đều có
    chiều rộng và cao trên màn hình.
  109. Ta vẫn chưa học chỗ này, nhưng chúng
    cũng có trạng thái thấy được.
  110. Chúng đều có thể ở trạng thái
    thấy được hoặc không thấy.
  111. Còn có vài thuộc tính khác
    giống nhau giữa chúng.
  112. Thay vì viết mã cho những thuộc tính này
    trong lớp TextView,
  113. rồi sao chép mã sang lớp
    ImageView, ButtonView,
  114. ta có thể làm thông minh hơn một chút.
  115. Ta có thể tạo ra một lớp View.
  116. Ta trích xuất những thuộc tính chung
    giữa các lớp View này rồi
  117. đặt chúng trong lớp View chung,
    như vậy chỉ cần viết mã một lần.
  118. Nhưng sau đó làm sao kết nối
    giữa lớp TextView
  119. và lớp View?
  120. Nếu bạn nghĩ đến việc thừa hưởng,
    bạn đã đúng.
  121. Trong file TextView.java, ta sẽ
    định nghĩa lớp TextView.
  122. Như thế ta sẽ thừa hưởng tất cả dữ liệu
    và Phương thức từ lớp View.
  123. Ta sẽ không phải viết nhiều mã
    trong lớp TextView
  124. vì phần tính năng đó
    đã được viết sẵn trong lớp View.
  125. Điều tương tự có thể áp dụng
    cho lớp ImageView
  126. và Button, ta không cần phải
    viết nhiều mã nữa.
  127. Trong những file này, ta chỉ cần
    viết những gì khác nhau
  128. khi so giữa ImageView và View.
  129. Tôi nghĩ có thể chỉ rõ một đoạn,
    để lớp ImageView chỉ cần
  130. chỉ ra những gì khác nhau
    giữa ImageView và View.
  131. Nếu ta không muốn thừa hưởng hành vi
    nhất định từ lớp view,
  132. ta có thể chỉ rõ hành vi cập nhật
    trong lớp ImageView,
  133. hoặc trong bất kỳ lớp nào ở đây.
  134. Để nhắc cho các bạn nhớ về thuật ngữ,
    trong trường hợp này,
  135. TextView là Phân lớp,
    và View là Siêu lớp.
  136. Nếu ta quay lại tài liệu
  137. phần về lớp TextView,
    giờ ta sẽ hiểu được phần này.
  138. Nó nói rằng TextView mở rộng cho View.
  139. Giờ ta biết rằng nó nghĩa là
    ta thừa hưởng trạng thái
  140. và các Phương thức từ lớp View.
  141. Và dưới đây là Sơ đồ Hệ thống Lớp.
  142. Nó cho thấy lớp TextView
    thừa hưởng từ lớp View.
  143. Và đến lượt mình, lớp View
    thừa hưởng từ lớp Object.
  144. Nếu bạn xem thêm xung quanh,
    bạn có thể thấy các lớp khác,
  145. như lớp EditText,
    mở rộng cho lớp TextView.
  146. Nên nó nhận những hành vi
    từ lớp TextView
  147. và thêm vào một chút
    tính năng riêng cho nó.
  148. EditText mở rộng từ TextView.
  149. TextView mở rộng từ View,
    và View mở rộng từ Object.
  150. Đây là Sơ đồ Hệ thống Lớp.
  151. Có rất nhiều điều,
    và bạn có thể xem lại trong nhiều giờ.
  152. Nhưng để tôi cho bạn xem một thứ
    trong trang tài liệu của TextView.
  153. Tôi muốn cho các bạn xem
    Phương thức SetVisibility.
  154. Đây là Phương thức Java cho
    SetVisibility trong lớp TextView.
  155. Nó sẽ thay đổi nhằm
    cho hiện hoặc không hiện cảnh.
  156. Nếu tôi nhấn vào Phương thức này,
    nó sẽ đưa tôi đến lớp View.
  157. Và nó mô tả Phương thức này làm gì.
  158. Bạn có thể thấy một đối tượng TextView
    có phương thức cho nhìn thấy hoặc không.
  159. Nhưng thật ra nó thừa hưởng
    từ lớp View.
  160. Chúng ta có tính năng này miễn phí,
    từ lớp View.
  161. Được rồi, ta vừa học
    cả tấn khái niệm mới.
  162. Thường thì những điều này sẽ rải ra trong
    một học kỳ của môn khoa học máy tính.
  163. Ta sẽ làm một chút thực hành
  164. và hy vọng là nó bắt đầu
    liên kết kiến thức lại cho các bạn.
  165. Nhưng hãy biết là
    sẽ tốn nhiều thời gian
  166. và thực hành, đến khi bạn hoàn toàn
    nắm chắc những khái niệm này.
  167. Bài tập đầu tiên, tôi muốn các bạn
    tạo một ứng dụng Android mới,
  168. vì chúng ta không muốn
    làm hỏng ứng dụng Java.
  169. Khi đã tạo xong project, hãy chạy app.
  170. Khi đã tạo xong app,
    các bạn sẽ thấy file MainActivity.
  171. File MainActivity đó sẽ là
    mở rộng từ AppCompatActivity.
  172. Trong phiên bản Android Studio của bạn,
    nếu MainActivity là mở rộng
  173. từ ActionBarActivity thì cũng không sao.
  174. Đó chỉ là phiên bản cũ của
    AppCompatActivity.
  175. Bằng cách bỏ ghi đè của Phương thức này,
    ta sẽ quay lại
  176. như cách Phương thức onCreate xuất hiện
    trong lớp AppCompatActivity.
  177. Sự hiện diện của Phương thức này cho biết
    ta muốn hành vi khác từ MainActivity
  178. cho onCreate.
  179. Nên bỏ nó đi sẽ đưa ta quay lại
    với hành vi gốc
  180. trong lớp AppCompatActivity.
  181. Khi bạn chạy ứng dụng,
  182. bạn chú ý thấy điều gì khác
    so với lần đầu chạy?
  183. Viết câu trả lời vào khung này.