Có bắt buộc implement tất cả method của interface?

Collections.sort(list, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return o2.compareTo(o1);
            }
});

A/c cho e hỏi vì sao không cần implement lại phương thức equals() của Interface Comparator mà đoạn code trên vẫn hoạt động ạ?

Vì phương thức Collections.sort() chỉ gọi đến Comparator.compare() nên việc bạn có ghi đè thêm cho hashCode() hay equals() là dư thừa.

4 Likes

tại theo e biết thì nếu 1 class implement từ 1 interface thì bắt buộc phải cài lại tất cả method của interface đó? nên e ko biết sao cái này nó ko bị lỗi

Bạn chưa hiểu rồi, trong Comparator chỉ khai báo duy nhất 1 phương thức cần triển khaicompare(). Còn các phương thức như equals(), hashCode(), wait(), notify(),… là của lớp cao nhất: java.lang.Object. Bất kì lớp nào đều cũng sẽ mặc định có các phương thức của Object.

6 Likes

https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html


Cái equals() của java.lang.Object thì e có biết nhưng vậy cho e hỏi sao trong interface Comparator nó ghi Abstract Methods như vầy có mục đích gì ạ?

2 Likes

=))) method trong interface lúc nào chẳng là abstract.
Abstract để bắt buộc lớp con phải triển khai, nhưng compare có vô số cách để compare, vì vậy không thể triển khai sẵn cho lớp con kế thừa được.

7 Likes

Hi there,

Cậu nói đúng, trong interface Comparator có định nghĩa phương thức equals. Đó là lý do trong mục abstract methods có tên của hàm equals.

Trong Comparator#equals javadoc có chỉ rõ cậu không cần override lại hàm equals đó:

Note that it is always safe not to override Object.equals(Object). However, overriding this method may, in some cases, improve performance by allowing programs to determine that two distinct comparators impose the same order.

Lý do cậu không cần phải implement method đó, vì bất cứ object nào cũng đã có cài đặt hàm equals (thừa kế từ Object class).

6 Likes

Giờ lại còn có default interface method nữa.

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