0
0
Posts
TR
Trung Rappartrungrappar2002_kungfutech

Khác Biệt Giữa Abstract Class và Interface Trong Java

Đăng vào 6 tháng trước

• 3 phút đọc

Chủ đề:

Java

Trong lập trình hướng đối tượng, Java cung cấp hai cơ chế mạnh mẽ để đạt được tính trừu tượng là Abstract Class và Interface. Mặc dù cả hai đều được sử dụng để định nghĩa các lớp không hoàn chỉnh mà từ đó các lớp khác có thể kế thừa và xây dựng dựa trên nó, nhưng chúng có những khác biệt cơ bản mà lập trình viên cần hiểu rõ để sử dụng chúng một cách hiệu quả.

Định Nghĩa và Mục Đích Sử Dụng

Abstract Class

Abstract Class trong Java là một lớp không thể tạo đối tượng (không thể khởi tạo). Lớp trừu tượng được sử dụng để đặt ra một khuôn mẫu cho các lớp con, nó có thể chứa phương thức trừu tượng (không có thân) và phương thức đã được cài đặt sẵn (có thân). Abstract Class thường được sử dụng khi các lớp con chia sẻ nhiều phương thức hoặc thuộc tính có cùng logic

Interface

Interface trong Java là một nhóm phương thức trừu tượng (trước Java 8) mà không có bất kỳ cài đặt cụ thể nào. Từ Java 8 trở đi, Interface có thể chứa các phương thức default và static có thân. Interface được sử dụng để thiết lập một hợp đồng cho các lớp khác thực hiện, giúp đảm bảo rằng các lớp này cung cấp các phương thức cụ thể

Khác Biệt Chính

Tính Trừu Tượng

  • Abstract Class: Có thể có cả phương thức trừu tượng và phương thức không trừu tượng. Điều này cho phép abstract class cung cấp một số cài đặt mặc định cho các phương thức.
  • Interface: Trước Java 8, chỉ chứa các phương thức trừu tượng. Từ Java 8, interface có thể chứa các phương thức default và static, nhưng vẫn giữ tính trừu tượng cao

Đa Kế Thừa

  • Abstract Class: Java không hỗ trợ đa kế thừa cho các lớp, do đó một lớp chỉ có thể kế thừa từ một abstract class.
  • Interface: Hỗ trợ đa kế thừa, một lớp có thể thực hiện nhiều interface

Mục Đích Sử Dụng

  • Abstract Class: Thường được sử dụng khi các lớp con có chung một phương thức hoặc cơ sở dữ liệu logic.
  • Interface: Sử dụng khi các lớp thực hiện nhiều hành vi khác nhau, không liên quan trực tiếp đến một hệ thống kế thừa

Thành Viên

  • Abstract Class: Có thể chứa các biến thành viên có trạng thái (stateful).
  • Interface: Chỉ có thể chứa các biến static và final (hằng số)

Ví Dụ Minh Họa

Ví Dụ Về Abstract Class

java Copy
public abstract class Animal {
    public abstract void eat();
    public void breathe() {
        System.out.println("Breathing...");
    }
}

public class Dog extends Animal {
    @Override
    public void eat() {
        System.out.println("Dog is eating.");
    }
}

Trong ví dụ này, Animal là một abstract class có một phương thức trừu tượng eat() và một phương thức không trừu tượng breathe(). Dog kế thừa Animal và cung cấp cài đặt cho phương thức eat().

Ví Dụ Về Interface

java Copy
public interface Animal {
    void eat();
    default void breathe() {
        System.out.println("Breathing...");
    }
}

public class Dog implements Animal {
    @Override
    public void eat() {
        System.out.println("Dog is eating.");
    }
}

Trong ví dụ này, Animal là một interface với phương thức trừu tượng eat() và phương thức default breathe(). Dog thực hiện interface Animal và cung cấp cài đặt cho phương thức eat().

Kết Luận

Việc lựa chọn giữa abstract class và interface phụ thuộc vào nhu cầu cụ thể của ứng dụng và mô hình thiết kế. Abstract class phù hợp khi các lớp con chia sẻ nhiều mã nguồn cơ bản, trong khi interface thích hợp khi cần đảm bảo các lớp thực hiện một bộ phương thức nhất định mà không cần kế thừa từ một lớp cha chung. Hiểu rõ sự khác biệt và cách sử dụng của chúng sẽ giúp lập trình viên tạo ra các ứng dụng hiệu quả, dễ bảo trì và mở rộng.

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào