Giải pháp chuyển đổi số trọn gói cho doanh nghiệp Việt
Đọc đến tiêu đề chắc hẳn bạn đã biết nội dung mà bài học hướng đến rồi. Đó chính là kiến thức về việc khai báo một lớp ở bên trong một lớp khác. Đây không phải là quan hệ cha-con gì nhé, do đó nó không phải là kế thừa, nó chỉ là một lớp được khai báo bên trong lớp khác mà thôi. Vậy chúng ta cùng nhau tìm hiểu xem việc lồng các lớp vào với nhau là gì và tại sao lại làm như vậy nhé.
Mình chỉ nhắc lại ý trên kia thôi, lớp lồng chính là việc khai báo một lớp ở bên trong một lớp khác.
Lớp mà chứa các lớp khác bên trong nó người ta gọi là Outer Class, có thể hiểu theo tiếng Việt là lớp Bao.
Còn lớp ở bên trong Outer Class thì được chia ra làm hai loại khác nhau.
Khoan hãy nói đến vai trò của từng loại Inner Class và Static Nested Class, chúng ta hãy đến với cú pháp khai báo của từng loại như sau.
Đây là cú pháp của một Inner Class.
class OuterClass { ... class InnerClass { ... } }
Còn đây là cú pháp của một Static Nested Class.
class OuterClass { ... static class StaticNestedClass { ... } }
Hai cú pháp không khác gì cả ngoài từ khóa static đúng không nào. Qua cú pháp trên, chúng ta có một số ý sau cần ghi nhớ.
Bạn nên nhớ là ứng dụng của lớp lồng là khá nhiều, nhưng việc sử dụng chúng hay không là không bắt buộc, và nếu cần sử dụng thì cũng không khó lắm.
Bài thực hành này chúng ta hãy xem việc định nghĩa và sử dụng một Inner Class như thế nào. Xong bài thực hành này chúng ta sẽ nói cụ thể hơn về công dụng của lớp lồng sau nhé.
Code sau khai báo lớp ToaDo được đặt bên trong lớp HinhHoc. Bạn cũng có thể khai báo lớp ToaDo ở ngoài HinhHoc như đã thực hành ở bài nào đấy, nhưng việc để ToaDo vào trong HinhHoc, bạn thấy lớp này có thể sử dụng thuộc tính tenHinh của lớp bao.
Việc lớp lồng sử dụng được thuộc tính của lớp bao sẽ được mình nói rõ hơn ở mục bên dưới các bài thực hành.
Giờ thì bạn tiếp tục xem ở phương thức main() chúng ta khai báo lớp HinhHoc và gọi đến xuatThongTin() của ToaDo như sau, chuyện gì sẽ xảy ra?
Chúng ta sẽ nhận được thông tin sau.
Với code trên của phương thức main(), bạn có thể thấy chúng ta khai báo đối tượng của lớp HinhHoc, rồi dùng đến biến toaDo của nó, trên kia viết như này hinhHoc.toaDo.xuatThongTin(). Bạn cũng có thể khai báo đối tượng riêng của lớp ToaDo để dùng cho những lần sau, như sau.
Bạn có thấy cách khai báo lớp ToaDo như code trên đây tuy lạ mà quen đúng không nào. Nhớ lại, ở các bài đầu tiên của OOP, khi mà mình chưa hướng dẫn các bạn có thể tạo nhiều lớp bên trong một project Java, mình đã phải dùng đến lớp lồng, bạn xem code ở bài này. Khi đó cũng có bạn nhanh trí nhìn ra vấn đề và hỏi, đến bây giờ mình mới có dịp được nhắc lại.
Bạn có thể hiểu lúc này ToaDo được xem như là một thành viên của HinhHoc. Chính vì vậy bạn chỉ có thể khởi tạo độc lập ToaDo thông qua đối tượng của HinhHoc là hinhHoc mà thôi.
Khi bạn thực thi dòng code trên kia của main(), bạn sẽ nhận được kết quả hơi khác chút như sau. Bạn có thể tự giải đáp tại sao kết quả lại khác như vậy không?
Mình cũng sẽ sử dụng kịch bản từ bài thực hành trên, nhưng thay lớp ToaDo bên trong HinhHoc bằng một Static Nested Class. Bạn xem có gì khác biệt không nhé.
Bạn có thể thấy, vì ToaDo được định nghĩa là một lớp static, nên nó chỉ có thể truy xuất đến các thuộc tính và phương thức static của lớp bao. Điều này giống với phương thức static mà bạn đã học, khi đó phương thức static cũng chỉ có thể gọi đến các thuộc tính được khai báo static mà thôi.
Với việc khai báo ToaDo như thế này, bạn vẫn gọi đến và sử dụng thông qua đối tượng bao hinhHoc một cách bình thường.
Hoặc bạn có thể khai báo độc lập trực tiếp ToaDo hơi khác với khi khai báo ToaDo là Inner Class như trên.
Bạn thử tự thực thi ứng dụng để xem console in ra gì nhé.
Dựa trên những gì chúng ta đã làm quen với lớp lồng trên đây, chúng ta đã có đủ trải nghiệm để tổng hợp lại vài công dụng của nó.
Chúng ta thử trắc nghiệm xem đã hiểu bài chưa thông qua bài tập này.
Giả sử có định nghĩa lớp bao và lớp lồng như sau.
Bạn thử trả lời xem kết quả in ra console sẽ như thế nào với đoạn code ở phương thức main() như sau.
Hãy tham khảo đáp án bên dưới để so sánh với câu trả lời của bạn.
Tương tự với bài tập số 1. Giả sử mình có định nghĩa lớp bao và lớp lồng như sau.
Và rồi ở phương thức main() mình gọi đến chúng như sau.
Bạn thử trả lời kết quả in ra console là gì nhé. Và đây là đáp án.
Chưa có câu hỏi nào cho bài này.