MyInterface myObj = new Obj();
MyInterface mySec = new Sec();
Đối với điều này là hợp pháp, cả hai Obj
và Sec
sẽ phải là người triển khai của MyInterface
. Sự khác biệt giữa hai đối tượng này sẽ là cách chúng cung cấp triển khai đó. Obj
và Sec
có thể làm hai điều rất khác nhau hoặc rất giống nhau, nhưng tính phổ biến của chúng là chúng sẽ tuân thủ một hợp đồng mà bạn có thể dựa vào. Hãy xem xét bạn có một phương pháp
public void doSomethingWith(MyInterface thing) {
thing.frob();
}
Mỗi đối tượng, myObj
và mySec
, có thể được thông qua vào phương pháp này, và phương pháp này sau đó có thể sử dụng phương pháp frob
của đối tượng đó (giả sử frob là một phần của việc kê khai giao diện). Đây là giải phóng. Điều này cho phép bạn làm những điều rất mạnh mẽ, bằng cách lập trình cho các giao diện và không triển khai. Ví dụ, bạn có thể mở rộng chức năng của các lớp và không thay đổi một dòng mã trong các lớp đó, bạn chỉ cần thực hiện một sự phụ thuộc khác nhau. Bạn không bị ràng buộc với, hoặc được kết hợp với, bất kỳ ý nghĩa nào bên trong phương thức doSomethingWith
.
nhưng tôi cũng đọc rằng nếu chúng ta khai báo myObj đối tượng như MyInterface, myObj sẽ không thể sử dụng phương pháp riêng của mình (từ lớp obj), là rằng sửa
nội , các trường hợp của Obj
sẽ tiếp tục có toàn quyền truy cập vào API Obj
. myObj
vẫn là Obj
, nó sẽ luôn có thể sử dụng chi tiết triển khai của riêng nó.
public interface MyInterface {
void frob();
}
public class Obj implements MyInterface {
public void frob() {
doFrobbing();
}
private void doFrobbing() {
System.out.println("frobbing");
}
public static void main(String[] args) {
MyInterface myObj = new Obj();
myObj.frob(); // still internally calls doFrobbing()
((Obj)myObj).doFrobbing(); // visible only via class reference
}
}
Instances của Obj
vẫn sẽ là trường hợp của Obj
, và những trường hợp vẫn có thể sử dụng doFrobbing
. Bên ngoài, những người sử dụng những trường hợp đó thông qua tham chiếu giao diện sẽ chỉ có thể truy cập các phương thức giao diện.
Nguồn
2011-12-07 00:35:21
[this] (http://docs.oracle.com/javase/tutorial/java/concepts/interface.html) có thể hữu ích. – Nerdtron