Sự khác biệt giữa lớp trừu tượng và giao diện trong Java

Khái niệm về sự khác biệt giữa lớp trừu tượng và giao diện trong Java có thể gây nhầm lẫn vì chúng được sử dụng trong các tình huống tương tự và cung cấp một chức năng tương tự. Có một số điểm khác biệt chính giữa cả hai. Và cả về cách định nghĩa và cách sử dụng chúng. Mà chúng ta sẽ xem xét trong bài viết này. Nếu bạn không quen thuộc với các khái niệm lập trình hướng đối tượng thì hãy cùng tìm hiểu qua bài viết sau đây!

Mục lục bài viết

Khái niệm về lập trình hướng đối tượng

Các ngôn ngữ như Java và C # là ngôn ngữ hướng đối tượng. Điều này có nghĩa là họ sử dụng các đối tượng lập trình mô phỏng các đối tượng trong thế giới thực. Các chương trình trong các ngôn ngữ này thực hiện các nhiệm vụ lập trình thông qua các đối tượng này.

Như bạn sẽ học Java, một lớp trong lập trình hướng đối tượng là một khuôn mẫu hoặc một bản thiết kế. Từ đó các đối tượng được dẫn xuất. Bạn có thể nói rằng một chiếc Mercedes Benz đã được bắt nguồn từ một lớp gọi là Ô tô. Điều này làm cho Mercedes Benz trở thành đối tượng của bạn, trong khi đẳng cấp của bạn sẽ là Ô tô.

Các ngôn ngữ hướng đối tượng như Java hỗ trợ khái niệm kế thừa. Điều này có nghĩa là một đối tượng có thể “kế thừa” các hành vi và phương thức của một lớp. Bất cứ khi nào bạn tạo đối tượng mới của một lớp. Bạn nói rằng bạn đang khởi tạo nó. Bạn cần phải nắm bắt cơ bản về các khái niệm hướng đối tượng để hiểu rõ ràng các lớp và giao diện trừu tượng.

Các lớp trừu tượng

Vậy chính xác thì các lớp trừu tượng là gì? Nhưng chúng ta hãy đi qua những điều cơ bản. Một lớp trừu tượng là một lớp mà bạn không thể khởi tạo. Nó sẽ cho phép các lớp khác kế thừa từ nó, nhưng nó không thể được khởi tạo bởi chính nó. Mục đích duy nhất của lớp trừu tượng là để các lớp con khác kế thừa từ nó. Nó có thể được sử dụng để áp đặt các hướng dẫn và phân cấp cho các lớp con.

Đây là một lớp trừu tượng đơn giản:

abstract class Cars
{
    int gas;
    int getGas()
    {
    return this.gas;
    }
    abstract void run();
}
class Merc extends Cars
{
   void run()
{
 print("Fast");
}
}

Giải thích:

Trong phần đầu tiên của đoạn mã, bạn đang khai báo một lớp trừu tượng “Cars”. Bạn đang tạo một hướng dẫn mà các lớp khác trong chương trình của bạn có thể lấy từ đó. Hành vi của lớp trừu tượng “Ô tô” của bạn sẽ được kế thừa bởi các lớp con.

Giao diện

Một giao diện không phải là một lớp, giống như lớp trừu tượng, nhưng nó rất giống với nó. Nó chứa các phương thức không có chữ ký (phần thân). Một giao diện không thể tự làm bất cứ điều gì.

Hãy coi nó như một mẫu trống mà bạn có thể sao chép và điền vào. Nó cũng được sử dụng để áp đặt các hướng dẫn và phân cấp cũng như cung cấp các phương thức cho các lớp con. Một lớp không thể kế thừa từ nhiều hơn một lớp trừu tượng cùng một lúc bằng các ngôn ngữ như Java và C. Do thiếu hỗ trợ đa kế thừa, các giao diện được sử dụng để thay thế.

Đây là một giao diện đơn giản và một lớp kế thừa từ nó:

interface Cars
{
     void run();
     int getGas();
}
class Merc implements Cars
{
    int gas;
    void run()
    {
    print("Faster");
    }
    int getGas()
    {
    return this.gas;
    }
}

Giải thích:

Như bạn có thể thấy, giao diện trống, không giống như lớp trừu tượng mà chúng ta đã khai báo trước đó, có các hành vi.

Sự khác biệt giữa lớp trừu tượng và giao diện trong Java

Một giao diện chứa một tập hợp các phương pháp chưa được triển khai. Một lớp tham chiếu đến giao diện phải ghi đè các phương thức này. Điều này cho phép lớp trở thành một phần của hai lớp cùng một lúc (đa kế thừa). Một lần là lớp con bình thường và một lần là “lớp con” của một giao diện.

Một lớp trừu tượng, giống như một giao diện, sẽ chứa các phương thức. Tuy nhiên, sẽ luôn có ít nhất một phương pháp chưa được hoàn thành. Đây là một điểm khác biệt chính giữa một lớp trừu tượng và một giao diện.

Lớp trừu tượng sẽ cung cấp một hướng dẫn (một định nghĩa lớp cơ sở) mà từ đó các lớp dẫn xuất sẽ bắt đầu. Bạn, lập trình viên, sẽ có thể triển khai các lớp dẫn xuất này. Bạn chỉ có thể định nghĩa các phương thức trừu tượng trong các lớp trừu tượng. Tuy nhiên, bạn không cần thiết phải xác định một phương thức trừu tượng khi bạn định nghĩa một lớp trừu tượng.

Ngoài sự khác biệt giữa lớp trừu tượng và giao diện trong Java này. Đây là một số khác biệt khác giữa hai loại:

  • Một lớp chỉ có thể kế thừa từ một lớp trừu tượng tại một thời điểm. Tuy nhiên, một lớp có thể kế thừa từ nhiều giao diện. Các giao diện được sử dụng để thực hiện khái niệm đa kế thừa trong lập trình hướng đối tượng.
  • Bởi vì một lớp trừu tượng là một lớp thực, nó có thể có các sửa đổi truy cập cho các chức năng. Và thuộc tính của nó, giống như đối với các lớp thông thường. Bởi vì giao diện không phải là một lớp, nó không cho phép các công cụ sửa đổi quyền truy cập. Mọi thứ được coi là công khai (mở cho mọi thứ) theo mặc định.
  • Một giao diện chỉ là một chữ ký trống và không chứa phần thân (mã). Một lớp trừu tượng có thể cung cấp mã, tức là, các phương thức phải được ghi đè. Đây có được xem là một trong những khác biệt giữa lớp trừu tượng và giao diện trong Java mà nhiều người chú ý tới. 
  • Các lớp trừu tượng được sử dụng khi chúng ta yêu cầu các lớp chia sẻ một hành vi (hoặc các phương thức) tương tự. Tuy nhiên, nếu chúng ta cần các lớp để chia sẻ chữ ký của phương thức. Chứ không phải bản thân các phương thức, chúng ta nên sử dụng các giao diện.
  • Chúng ta có thể nói rằng một lớp trừu tượng được pc xử lý nhanh hơn. Nhưng nó phụ thuộc vào mã chúng ta đã viết. Đôi khi một giao diện nhanh hơn (vì nó chỉ là một loạt các tên trống). Đôi khi một lớp trừu tượng được xử lý nhanh hơn. Vì máy tính không cần tham chiếu đến lớp dẫn xuất cho một phương thức.
  • Cần nhiều thời gian hơn để thêm các phương thức mới vào một giao diện. Mã phải được viết lại cho giao diện và cho tất cả các lớp tham chiếu đến nó bao gồm các phương thức mới. Sẽ dễ dàng hơn để thêm mã vào một lớp trừu tượng. Vì chúng ta có thể sử dụng nó làm cài đặt mặc định. Chương trình sẽ vẫn tiếp tục chạy bình thường.
  • Bởi vì giao diện trống, nó không thể có hằng số hoặc trường. Một lớp trừu tượng có thể chứa các trường và định nghĩa hằng số.
  • Các giao diện có thể thêm vào chức năng hiện có của một lớp. Chúng không nhất thiết phải tích hợp với danh tính của các lớp tham chiếu đến chúng. Mặt khác, các lớp trừu tượng cung cấp một danh tính cho các lớp bắt nguồn từ chúng. Vì chúng kế thừa các hành vi của mình từ nó.

Tổng kết

Tóm lại, chúng ta có thể nói rằng sự khác biệt giữa lớp trừu tượng và giao diện trong Java là các phương thức mà chúng chứa đã hoàn thành so với chưa hoàn thành. Và nội dung của chúng một lớp thực so với một mẫu trống. Nếu bạn không chắc nên sử dụng một lớp trừu tượng hay một giao diện. Hãy đảm bảo rằng bạn hiểu rõ hơn về các khái niệm lập trình Java nâng cao để đưa ra lựa chọn sáng suốt hơn.

5/5 - (5 bình chọn)
Xin chào các bạn! Mình là Hà Nguyên Phương Hiện đang là tác giả của Box.edu.vn website nổi tiếng chuyên review, đánh giá, giới thiệu các khóa học hay nhất hiện nay.