2009-02-21 26 views
15

Trong C#, nếu bạn có hai giao diện cơ sở với cùng một phương thức (ví dụ, F()), bạn có thể sử dụng thực hiện rõ ràng để thực hiện các hàm impl khác nhau. cho F(). Điều này giúp bạn xử lý đối tượng một cách khác, tương ứng với quan điểm hiện tại: IMyInterface1 hoặc IMyInterface2. Điều này có thể thực hiện được trong Java không?C# "thực hiện rõ ràng" của giao diện có trong Java?

Trả lời

25

Không, không có gì giống như thực hiện giao diện rõ ràng của C# trong Java.

Mặt khác, Java có các kiểu trả về biến đổi, vì vậy nếu bạn muốn cung cấp cách triển khai mạnh mẽ hơn so với giao diện được chỉ định, thì không sao. Ví dụ: điều này là tốt:

interface Foo 
{ 
    Object getBar(); 
} 

public class Test implements Foo 
{ 
    @Override 
    public String getBar() 
    { 
     return "hi"; 
    } 
} 

C# sẽ không cho phép - và một trong những cách xung quanh thường là thực hiện giao diện một cách rõ ràng và sau đó có phương thức công khai cụ thể hơn (thường được gọi là thực hiện giao diện)).

0

Bạn chỉ có thể thực hiện việc này nếu các phương pháp bị quá tải. Nếu bạn có hai phương pháp dự kiến ​​sẽ làm những việc khác nhau, họ nên có tên khác nhau IMHO.

-17

Không và nó sẽ không bao giờ xuất hiện trong Java. Nó chỉ là một cái xương để ném vào những người không thể bị làm phiền với thiết kế tốt.

Triển khai rõ ràng giao diện không bao giờ cần thiết hoặc được sử dụng. Có những cách tốt hơn để giải quyết vấn đề mà điều này cố gắng giải quyết.

+0

Bạn cũng tin rằng thừa kế riêng chỉ dành cho "những người không thể bị làm phiền với thiết kế tốt"? Đó là một khả năng OOP hữu ích khác bị thiếu trong Java. –

+0

Nó sẽ không bao giờ có trong Java vì lý do tương tự mà các đại biểu sẽ không bao giờ được trong Java .. google nó. Có một bài viết hay về lý do tại sao các đại biểu không bao giờ được thực hiện trong Java và điều này là tương tự. Nó xấu vì những gì nó cho phép bạn không làm những thứ tốt bạn có thể làm với nó. Một cái gì đó Microsoft và hệ sinh thái của nó không nhận được. – eaglestorm

+1

@ealgestorm, bạn nhận ra rằng ngay cả Swing "lạm dụng" đối tượng để làm cho họ cư xử như đại biểu, phải không? Ngoài ra, tôi tìm thấy nó một chút vui mà hầu như tất cả các câu hỏi của bạn có liên quan đến .NET. –

3

Bạn có thể đạt được hiệu ứng tương tự bằng cách sử dụng cơ chế triển khai giao diện ẩn danh trong Java.

Xem ví dụ:

interface Foo { 

    void f(); 
} 

interface Bar { 

    void f(); 
} 

public class Test { 

    private String foo = "foo", bar = "bar"; 

    Foo getFoo() { 
     return new Foo() { 

      @Override 
      public void f() { 
       System.out.println(foo); 
      } 
     }; 
    } 

    Bar getBar() { 
     return new Bar() { 

      @Override 
      public void f() { 
       System.out.println(bar); 
      } 
     }; 
    } 

    public static void main(String... args) { 
     Test test = new Test(); 
     test.getFoo().f(); 
     test.getBar().f(); 
    } 
} 
Các vấn đề liên quan