Tại sao dùng interface? Dùng callback trong lập trình Android như thế nào?

Xin chào mọi người,
Em code Android bấy lâu nay mà mắc nhất đoạn dùng callback, em đọc về nó mà ko hiểu nhiều lắm. Vậy trên đây mọi người cho em hỏi 2 câu là:

  1. Tại sao dùng interface
  2. Dùng callback trong lập trình Android như thế nào

Rất mong mọi người chỉ thêm cho em ạ.

Hi e

  • Interface là một class chỉ chứa abstract method
  • Callback là một hàm. Mà e chỉ biết thời điểm nó được gọi (when), nhưng không biết hàm đó sẽ làm gì (what).

Ví dụ em viết một chương trình diển tả sự phát triển của con người. Vào khoảng năm 15 tuổi (when), con người sẽ dậy thì. Nhưng quá trình dậy thì sẽ làm gì (what) thì tùy thuộc vào từng đối tượng. Con trai thì vỡ giọng, con gái thì thân hình sẽ sexy hơn. Còn 3D thì cũng bắt đầu bung lụa.

Trong trường hợp này thì mình có thể viết, con người là một interface chứa hàm dậy_thì(), hàm dậy_thì() đóng vai trò là callback để gọi vào năm 15 tuổi. Và những gì diển ra khi dậy_thì() không được implement bởi lớp con người, mà do các lớp con như Nam, Nữ, 3D implement.

5 Likes

Tks anh đã reply.
Về Interface em muốn hỏi là tại sao dùng interface (mà ko dùng abstract class) ạ :slight_smile:

Dùng cái nào cũng được mà bạn, kể cả dùng lớp thông thường (class). Dùng giao tiếp (interface) để “bắt buộc” phải triển khai các phương thức liên quan đến sự kiện.

Trong java swing có những sự kiện được khai báo callback bằng giao tiếp. Nhưng đông thời có những lớp trừu tượng (abstract class) triển khai từ các giao tiếp đó với các phương thức được triển khai là rỗng (bên trong không làm gì) để giảm việc phải ghi đè tất cả các phương thức (nếu chỉ có dùng 1 vài).
Vd:
KeyAdapter.

1 Like

hi e
tại sao lại phải dùng interface mà ko dùng abstract class?


trong java, 1 class chỉ được phép kế thừa 1 class/abstract class.
tuy nhiên, 1 class được phép kế thừa nhiều interface.
và, sẽ có những trường hợp mà e cần sử dụng đa kế thừa

ví dụ
trong lập trình Android
ban đầu, MainActivity kế thừa Activity
để xử lý click event từ user
MainActivity muốn kế thừa thêm View.OnClickListener
nếu View.OnClickListener cũng là 1 class hoặc abstract class, thì compiler sẽ báo lỗi vì quy phạm qui tắc kế thừa của java
như vậy, Android họ implement View.OnClickListener là một interface để hổ trợ cho việc các lớp có thể kế thừa OnClickListener và xử lý click event dễ dàng hơn sau này

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?