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
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)).
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.
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.
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();
}
}
- 1. trừu tượng thực hiện giao diện rõ ràng trong C#
- 2. "Các ràng buộc để thực hiện giao diện rõ ràng ..."
- 3. Có thể buộc thực hiện rõ ràng giao diện (hoặc một phần của giao diện) không?
- 4. Thực hiện Giao diện vs Triển khai Giao diện Rõ ràng trong C#
- 5. ngầm vs giao diện thực hiện rõ ràng
- 6. Thực hiện giao diện rõ ràng và Reflection.Emit
- 7. Tại sao trình biên dịch C# chèn một giao diện thực hiện rõ ràng?
- 8. Giao diện và ràng buộc chung chung được thực hiện rõ ràng
- 9. Xác định các phôi ngầm rõ ràng và rõ ràng cho các giao diện C#
- 10. Java - Thực hiện giao diện
- 11. Thực hiện giao diện Java trong MATLAB
- 12. Triển khai giao diện rõ ràng trong VB.NET
- 13. Thực hiện các giao diện trong C++
- 14. Phương thức giao diện Java Phương pháp: Mỗi lớp có thực hiện một giao diện không?
- 15. hạn chế trong việc thực hiện giao diện trong java
- 16. Làm thế nào để phản ánh trên C# thực hiện giao diện rõ ràng từ ngăn xếp cuộc gọi?
- 17. Tại sao trình biên dịch C# khai báo rõ ràng tất cả các giao diện một loại thực hiện?
- 18. Tại sao triển khai giao diện rõ ràng?
- 19. Ngụ ý và triển khai rõ ràng giao diện
- 20. C# Giao diện: Có thể tham khảo loại thực hiện giao diện trong chính giao diện không?
- 21. Thực hiện một giao diện java trong Scala
- 22. Cách gọi một phương thức giao diện được khai báo rõ ràng trong C#
- 23. Tạo một thể hiện của giao diện trong C#
- 24. thực hiện dự phòng của giao diện List trong ArrayList.java
- 25. Làm thế nào để phát ra thực hiện giao diện rõ ràng bằng cách sử dụng reflection.emit?
- 26. Trong C#, tại sao việc triển khai giao diện phải thực hiện một phiên bản khác của phương thức một cách rõ ràng?
- 27. Thực hiện giao diện IList
- 28. Kiểm tra xem đối tượng có thực hiện giao diện
- 29. Thực hiện enum trong C# Giao diện và một trong những giao diện của phương pháp chữ ký
- 30. boost :: asio - Làm rõ ràng ràng buộc với một giao diện mạng cụ thể
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. –
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
@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. –