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

Đào An viết 12:02 ngày 01/10/2018

Interface chỉ để khai báo thôi mà, còn thực thi như nào là do class quyết định nên:

gọi A.work()

ko gọi được A.work() đâu…
Ý nghĩa dùng interface:

  • Làm cho code dễ dàng mở rộng và bảo trì
  • Dễ testing
    https://www.javatpoint.com/interface-in-java
invicible viết 12:13 ngày 01/10/2018

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

Đào An viết 12:11 ngày 01/10/2018

Thực sự m ko hiểu lắm về cái gọi kia. Bạn demo bằng code đc ko ?

invicible viết 12:15 ngày 01/10/2018

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

Đào An viết 12:04 ngày 01/10/2018
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

Ideone.com

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.

Bao Trung Tran viết 12:02 ngày 01/10/2018

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.

Quân viết 12:04 ngày 01/10/2018

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

Phạm Vinh viết 12:12 ngày 01/10/2018

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()

rogp10 viết 12:16 ngày 01/10/2018

Chính xác. Cái abstract đó là abstract class ví dụ minh họa: https://stackoverflow.com/a/3597910

Bài liên quan
0