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

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:

Mình vẫn gọi được qua interface bạn ạ :joy:

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ì?

interface printable{  
void print();  
}  
class A6 implements printable{  
public void print(){System.out.println("Hello");}  
  
public static void main(String args[]){  
A6 obj = new A6();  
obj.print();  
 }  
}  

m chỉ thấy class 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

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

1 Like

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 :

public interface Animal{

public void makeSound();
} 

public class Cat implements Animal{
public void makeSound(){
System.out.println("Meow");
}
}

public class Dog implements Animal{
public void makeSound(){
System.out.println("Gâu");
}
}

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)

public static void main(...){
Animal a=new Cat();
Animal o=new Dog();

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

a.makeSound();//-->Meow
o.makeSound();//-->Gâu
}

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 :slight_smile: ví dụ minh họa: https://stackoverflow.com/a/3597910

Interface is collection of methods of abstract type (having empty body). It’s similar to Abstract class.

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