01/10/2018, 10:00
Gọi phương thức thực thi từ Interface
Chào các bạn, mình có câu hỏi về Java mong các bạn giải đáp:
Hiện mình có interface A và class A1 implement method work() của A.
Hiện mình thấy nếu gọi A.work() thì có thể gọi ra hàm thực thi work() của A1. Vậy nếu có class A2 cũng implement method work() của A thì khi gọi A.work() sẽ gọi tới phương thức nào và tại sao? Ngoài ra interface còn có những ý nghĩa như nào nữa? Tks
Bài liên quan
Interface chỉ để khai báo thôi mà, còn thực thi như nào là do class quyết định nên:
ko gọi được A.work() đâu…
Ý nghĩa dùng interface:
https://www.javatpoint.com/interface-in-java
Mình vẫn gọi được qua interface bạn ạ
Thực sự m ko hiểu lắm về cái gọi kia. Bạn demo bằng code đc ko ?
interface A {
void work();
}
class A1 implement A {
void work(){
syso(“yes”);
}
}
Mình thấy có thể gọi được A.work() để in ra “help me”. Nhưng nếu có thể A2
class A2 implement A {
void work(){
syso(“no”)
}
}
Vậy nếu gọi A.work() thì sẽ in ra gì?
m chỉ thấy class
Ideone.com
implements
interface rồi từ class tạo object để gọi hàm thôi. Chứ ko thấy gọi được Hàm từ interface, vì interface làm gì tạo được object ??.bạn copy nguyên cái code bạn chạy được work để in ra “help me” cho m xem với
Ideone.com
Ideone is something more than a pastebin; it's an online compiler and debugging tool which allows to compile and run code online in more than 40 programming languages.
Interface là trừu tượng. Vì vậy khi bạn tạo một phương thức nó sẽ không có thân. Các lớp muốn sử dụng nó phải implements nó lại và viết lại hàm đó. Như ví dụ ở trên thì bạn kia override lại và viết lại print.Sau đó trong main bạn ấy gọi lại phương thức print. Nói tóm lại interface chỉ cung cấp 1 cái sườn còn bạn tự triễn khai theo ý mình muốn.
Interface trong java hoặc protocol trong 1 số nnlt khác đóng vai trò như là hợp đồng (contract) giữa các object với nhau, do đó bản thân interface không làm gì cả mà chỉ nêu ra những thứ mà interface có thể cung cấp nhưng cái thực sự làm gì đó thì chính là class.
Giống như ngoài đời sống cũng thế, interface giống như 1 bản hợp đồng những điều khoản phải làm nhưng bản thân bản hợp đồng đó không làm việc mà chỉ những ai phải thi hành (implement) hợp đồng mới là người làm việc.
Ps: Bạn nên hiểu interface là contract hơn là abstraction như nhiều sách dạy, điều này sẽ giúp bạn dễ thấy được lợi ích của interface và áp dụng vào thiết kế code chuẩn hơn. Chỉ là chút kinh nghiệm cá nhân
Interface như @tbtrungit nói chỉ là một cái khung sườn để đảm bảo được tính thống nhất của các phương thức mà class bắt buộc phải có khi implements.
Vd như mình có một interface Animal, mỗi động vật có thể kêu (
public void makeSound()
) nhưng mỗi loài đều có tiếng kêu khác nhau :Do 2 class trên đều implements Animal nên chúng ta có thể coi chúng như một Animal object (tính đa hình)
Vậy nên không quan trọng là bạn gọi A.work() hay A1.work() vì nó chỉ gọi phương thức của object thật chứ không phải kiểu object của biến
Mặc dù mình đã khai báo biến là Animal nhưng chương trình sẽ vẫn thực thi phương thức của object thật Cat.makeSound(), Dog.makeSound()
Chính xác. Cái abstract đó là abstract class ví dụ minh họa: https://stackoverflow.com/a/3597910