JavaRush /Blog Java /Random-VI /Tại sao kế thừa giao diện lại cần thiết?
Павел
Mức độ

Tại sao kế thừa giao diện lại cần thiết?

Xuất bản trong nhóm
Tại sao cần có giao diện? Tại sao kế thừa giao diện lại cần thiết? Tại sao cần có tính đa hình? Dành cho những ai đã đọc và hiểu cách làm kế thừa giao diện nhưng chưa hiểu tại sao. Lần trước, sử dụng ví dụ về gia đình Ivanov bình thường, chúng tôi đã xem xét lý do tại sao cần có giao diện. Chúng tôi tiếp tục số hóa gia đình gặp khó khăn. Mỗi người đều có một số thói quen không được thừa hưởng từ ai hoặc không truyền lại cho ai - đó là thói quen của cá nhân mình. Nhiệm vụ của chúng tôi là cung cấp cho mỗi thành viên trong gia đình những thói quen riêng. Hãy chuyển sang mặt phẳng Java: chúng ta cần triển khai các phương thức duy nhất trong các lớp sẽ chỉ thuộc về các lớp này. Vâng, hãy tiếp tục! Đây là Petya:
class Петя implements ПривычкиПапы, ПривычкиМамы {

//это личные Петины привычки
public void ковырятьВНосу () {
System.out.println("Ковырь-ковырь");
    }

//это унаследованные привычки
@Override
public void прихлюпывать() {
     System.out.println("Хлюп");
   }

@Override
public void поджимать () {
System.out.println("Поджать губки");
    }
}
Đây là bố:
class Папа implements ПривычкиПапы {

//это личные Папины привычки
public void чесатьБороду () {
System.out.println("Чешу бороду");
    }

//это переданные привычки
   @Override
    public void прихлюпывать() {
     System.out.println("Хлюп");
   }
}
Đây là mẹ:
class Мама implements ПривычкиМамы{

//это личные Мамины привычки
public void хлопатьРесницами () {
System.out.println("Хлоп-хлоп");
    }

//это переданные привычки
@Override
public void поджимать() {
System.out.println("Поджать губки");
    }
}
Hoàn hảo! Mọi thứ đều hoạt động như bình thường! Trong bài viết đầu tiên, người ta nói rằng chương trình này phản ánh thế giới thực. Đặc tính thú vị nhất của thực tế là nó luôn thay đổi. Gia đình Ivanov cũng không ngoại lệ, họ có một cô con gái đáng yêu tên Masha. Và cô bé thừa hưởng thói quen chớp mi từ mẹ và sụt sịt từ bố. Chúng ta cần thực hiện những thay đổi đối với chương trình của mình. Tại sao kế thừa giao diện lại cần thiết?  - 1Thôi nào, không khó lắm đâu, cái chính là phải suy nghĩ logic. Suy cho cùng, mọi người đều biết tại sao cần có giao diện. Bây giờ, hãy tạo một giao diện cho Masha's Habits , mô tả phương thức clapElashes()squish() ở đó , triển khai nó cho Masha và chúng ta đã hoàn tất. Vậy điều gì sẽ xảy ra nếu các phương thức có cùng tên đã được triển khai trong các giao diện khác, bạn có thể thực hiện một lần. Tại sao kế thừa giao diện lại cần thiết?  - 2Quả thực, ai biết được gia đình Ivanov có kế hoạch gì, nếu Seryozha ra đời , ai sẽ kế thừa những thói quen từ Bố, Mẹ, Ông Cố và ai đó từ thế hệ thứ tư, mỗi lần tạo ra một giao diện, như: giao diện Thói quen của Seryozha , và ở đó khai báo các phương thức có thể được khai báo hàng trăm lần trong các giao diện khác? Trong một vài hoặc ba thế hệ, chúng ta có nguy cơ nhận được các giao diện với nhiều phương pháp giống hệt nhau đã được mô tả trong các giao diện khác và nếu chúng ta cần thay đổi tên của một số thói quen (và điều này hoàn toàn có thể xảy ra - xét cho cùng, thế giới đang thay đổi) , vậy thì làm thế nào để tìm ra món spaghetti này, tôi không thể tưởng tượng được. Tất cả những gì còn lại là ngồi và mơ về một điều kỳ diệu. Tại sao kế thừa giao diện lại cần thiết?  - 3Bây giờ, nếu mỗi thói quen có giao diện riêng. Hãy tưởng tượng:
public interface ПривычкаПрихлюпывать {
    public void прихлюпывать();
}
public interface ПривычкаПоджимать {
    public void поджимать();
}
public interface ПривычкаКовырятьВНосу {
    public void ковырятьВНосу();
}
public interface ПривычкаХлопатьРесницами {
    public void хлопатьРесницами();
}
public interface ПривычкаЧесатьБороду {
    public void чесатьБороду();
}
Và sau đó, giống như trong Lego, chúng ta có thể, bằng cách sử dụng tính kế thừa từ các thói quen cá nhân, tạo ra giao diện mà chúng ta cần cho thói quen của từng thành viên trong gia đình. Một cái gì đó như thế này:
public interface ПривычкиМамы extends ПривычкаПоджимать, ПривычкаХлопатьРесницами {
    }
public interface ПривычкиПапы extends ПривычкаЧесатьБороду, ПривычкаХлюпать {
    }
public interface ПривычкиПети extends ПривычкаПоджимать, ПривычкаХлюпать,ПривычкаКовырятьВНосу {
    }
public interface ПривычкиМаши extends ПривычкаХлюпать, ПривычкаХлопатьРесницами {
    }
Và sau đó chỉ cần triển khai giao diện mong muốn cho lớp mong muốn, ví dụ: Mẹ:
class Мама implements ПривычкиМамы{
@Override
public void хлопатьРесницами () {
System.out.println("Хлоп-хлоп");
    }

@Override
public void поджимать() {
System.out.println("Поджать губки");
    }
}
Điều tương tự cũng có thể được thực hiện với Papa, Petya và Masha . Và sau đó, với sự mở rộng của gia đình Ivanov, sẽ không có vấn đề gì với thói quen, chúng tôi chỉ cần xáo trộn chúng thông qua kế thừa ở cấp độ giao diện, giống như các thành phần trong món salad, và sẽ không tạo ra một loạt phương pháp có cùng tên. Ơ, ước mơ, ước mơ... Tại sao kế thừa giao diện lại cần thiết?  - 4Người đàn ông được vẽ nói đúng, điều này thực sự có thể xảy ra - giờ đây mô phỏng gia đình Ivanov đã được cứu! Một độc giả chú ý có thể đặt câu hỏi: "Tại sao tạo giao diện cho từng thành viên trong gia đình? Chúng tôi có một tập hợp các hành động - triển khai ngay chúng cho lớp được yêu cầu." Hãy tưởng tượng rằng ở nhiều thế giới song song đều có các nhân đôi của Petya và tất cả Petya đều cần triển khai giao diện Petya's Habits
interface ПривычкиПети extends ПривычкаПоджимать, ПривычкаХлюпать,ПривычкаКовырятьВНосу

class ПетяВселеннаяХ implements ПривычкиПети
class ПетяВселеннаяY implements ПривычкиПети
// и т.д.
Nếu không có giao diện chung thì sao?
class ПетяВселеннаяХ implements ПривычкаПоджимать, ПривычкаХлюпать,ПривычкаКовырятьВНосу
class ПетяВселеннаяY implements ПривычкаПоджимать, ПривычкаХлюпать,ПривычкаКовырятьВНосу
// и т.д.
Điều này dẫn đến mã lặp đi lặp lại nhiều hơn. Kế thừa giao diện giúp ứng dụng linh hoạt hơn trong việc thay đổi, đặc biệt có thể giải quyết được các vấn đề về phương pháp lặp lại. Xin lưu ý một lần nữa rằng việc kế thừa nhiều giao diện được cho phép.
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION