Mục lục:
Video: Hướng Dẫn Lập Trình Web Theo Mô Hình MVC & OOP 2025
Nếu một lớp Java không bị hỏng, đừng sửa nó. Giả sử bạn muốn thêm chức năng vào một lớp Java hiện có. Bạn thích lớp Hoạt động của Android, nhưng lớp Hoạt động được tuyên bố trước hiển thị không có gì trên màn hình. Bạn có viết lại lớp Hoạt động của Android không? Không.
Thay vì viết lại một lớp hiện có, bạn mở rộng lớp. Ngay cả trong ứng dụng "Hello" Android không có gì, bạn viết
lớp MyActivity công khai mở rộng Activity
Sau đó, trong khai báo lớp MyActivity, bạn viết
@Xoá bỏ void onCreate công cộng (Bundle savedInstanceState) {super. onCreate (savedInstanceState); setContentView (R. layout. main);}
Lớp MyActivity của bạn tạo ra các chức năng mới bằng cách mở rộng hầu hết các chức năng Hoạt động của Android trong khi vẫn làm phương pháp OnCreate chết trên não của lớp Activity.
Các lớp cuối cùng của Java
Trong lập trình hướng đối tượng, việc mở rộng một lớp học là điều quý giá nhất mà bạn có thể làm.
Tuy nhiên, một số lớp học không được mở rộng. Lấy ví dụ, lớp String của Java. Chuỗi là một Chuỗi là một Chuỗi. Bạn không muốn MyString của ai đó. chiều dài để trả lại khoảng thời gian cần thiết để tranh giành các ký tự của một chuỗi. Để ngăn không cho ai đó làm bất cứ điều gì không mong muốn, bất thường hoặc không bình thường với các phương pháp của chuỗi, người sáng tạo của Java đã làm cho lớp String cuối cùng:
public class cuối cùng Chuỗi
Một số lớp học đã tuyên bố của Android cũng là cuối cùng, Các lớp học Điện thoại và MediaStore.
Giống như lớp cuối cùng ghét được mở rộng,
lớp trừu tượng nhấn mạnh vào việc được mở rộng. ViewGroup của Android là một ví dụ về một lớp trừu tượng. public
abstract class ViewGroup {public void bringChildToFront (Xem con) {int index = indexOfChild (con); if (index => 0) {removeFromArray (index); addInArray (con, mChildrenCount); đứa trẻ. mParent = this;}} protected abstract void onLayout (thay đổi boolean, int l, int t, int r, int b);} ViewGroup của Android. tập tin java là hơn 3, 700 dòng dài. Vì vậy ví dụ này chỉ có một phần rất nhỏ trong mã của tệp. Nhưng bạn có thể thấy một lớp trở nên trừu tượng như thế nào. Không ai ngạc nhiên, từ abstract trước từ lớp. Nhưng từ abstract cũng bắt đầu khai báo một số phương pháp thuộc lớp.
Người sáng lập Android đã quyết định rằng ý tưởng về một ViewGroup rất hữu ích. Chúng là chính xác bởi vì bố cục Android yêu thích của bạn (LinearLayout, RelativeLayout, v.v.) là các lớp con của ViewGroup.Họ cũng hiểu rằng từ một loại ViewGroup sang một loại khác, một số chức năng không thay đổi. Ví dụ, ví dụ trên xác định một phương thức bringChildToFront, và các lớp con của ViewGroup kế thừa phương thức này.
Nhưng những người sáng lập cũng nhận ra rằng một số khía cạnh của một ViewGroup không có ý nghĩa trừ khi bạn làm việc với một nhóm cụ thể. Ví dụ: LinearLayout đặt những thứ này một cái khác, và RelativeLayout đặt mọi thứ ở trên, bên dưới và bên cạnh nhau. Vì vậy, mã trên không có phương pháp onLayout đầy đủ.
Khai báo onLayout không có cơ thể phương pháp. Nhưng Android yêu cầu mỗi lớp con của lớp ViewGroup để khai báo phương thức onLayout của chính nó. Java thi hành yêu cầu này khi bạn tuyên bố phương pháp onLayout được trừu tượng.
Là một nhà phát triển, bạn không thể tạo ra một đối tượng từ một lớp trừu tượng. Nếu bạn viết
ViewGroup group = new ViewGroup ();
Java nói với bạn rằng bạn đang cư xử không tốt. Để làm điều gì đó hữu ích với lớp ViewGroup, bạn cần một phân lớp của lớp ViewGroup. Lớp con có một phiên bản cụ thể của mỗi phương thức trừu tượng trong lớp ViewGroup:
gói com. allmycode. mẫu; nhập khẩu android Nội dung. Bối cảnh; nhập khẩu android lượt xem. ViewGroup; class public MyLayout
mở rộng ViewGroup {public MyLayout (Context context) {super (context);} @Chuyển bảo vệ void onLayout (thay đổi boolean, int l, int t, int r, int b);}}
