Nền tảng Kiến thức - Hành trang tới Tương lai
Card image

Chương 4-Bài 11. So sánh giữa Lớp trừu tượng (Abstract class) và Giao diện (Interface) trong Java

Tác giả: Dương Nguyễn Phú Cường #12047
Ngày đăng: 2 tháng trước
Lượt xem: 127

So sánh giữa Lớp trừu tượng (Abstract class) và Giao diện (Interface) trong Java

Lớp trừu tượng (abstract class) Interface
Thể hiện tính trừu tượng < 100% Thể hiện tính trừu tượng 100% (Java < 8).
Lớp trừu tượng có thể có các phương thức abstract và non-abstract Phiên bản Java < 8, Interface chỉ có thể có phương thức abstract.
Phiên bản Java 8, có thể thêm default  static methods.
Phiên bản Java 9, có thể thêm private methods.
Lớp trừu tượng không hỗ trợ đa kế thừa Interface hỗ trợ đa kế thừa
Lớp trừu tượng có thể có các biến final, non-final, static và non-static Interface chỉ có các biến static final
Lớp trừu tượng có thể có phương thức static, phương thức main và constructor Interface không thể có phương thức static, main hoặc constructor.
Từ khóa abstract được sử dụng để khai báo lớp trừu tượng Từ khóa interface được sử dụng để khai báo Interface
Lớp trừu tượng có thể cung cấp trình triển khai của Interface Interface không cung cấp trình triển khai cụ thể của lớp abstract
Ví dụ:
public abstract class Shape {
public abstract void draw();
}
Ví dụ:
public interface Drawable {
void draw();
}
Sử dụng Abstract class khi chúng ta chỉ có thể hoàn thành một vài chức năng (method/ function) chuẩn của hệ thống, một vài chức năng còn lại các lớp extends phải hoàn thành. Những tính năng đã hoàn thành này vẫn sử dụng như bình thường, đây là những tính năng chung. Sử dụng Interface khi bạn muốn tạo dựng một bộ khung chuẩn gồm các chức năng (method/ function) mà tất cả module/ project cần phải có. Các module phải implements tất cả chức năng đã được định nghĩa.

Nói về Abtract Class và Interface, đôi khi bạn sẽ gặp một số cách gọi: Khi một class extend một class/ abtract class thì có nghĩa là ta đang thể hiện mối quan hệ is-a (là), còn khi implement một interface, thì ta đang thể hiện mối quan hệ has-a (có, hay thực hiện).

 


Chương trình học


  1. Giới thiệu, cài đặt, cấu hình môi trường lập trình 1
    1. Cài đặt trình soạn thảo code Eclipse IDE #10514
  2. Java căn bản 6
    1. Giới thiệu, đặc điểm, lịch sử của ngôn ngữ lập trình Java #11940
    2. Giới thiệu JVM, JRE, JDK trong Java #11947
    3. Viết chương trình Java đầu tiên (java hello world) #11950
    4. Biến (variables) và kiểu dữ liệu nguyên thủy (primitive data types) trong Java #11961
    5. Nhập liệu qua cửa sổ console (input), In ra màn hình qua cửa sổ console (output) #11970
    6. Toán tử (operators) trong Java #11980
  3. Java căn bản - Bài tập 3
    1. Java Core - Lab 1 - Lập trình căn bản #11988
    2. Java Core - Lab 2 - Câu lệnh điều kiện IF ELSE, SWITCH CASE #11993
    3. Java Core - Lab 3 - Vòng lặp FOR, WHILE, DO WHILE #11996
  4. Java hướng đối tượng - Object Oriented Programming (OOP) 12
    1. Gói (packages) trong Java #11999
    2. Lớp (Class) và Thể hiện (Object) trong Java #12005
    3. Hàm khởi tạo (constructor) trong Java #12010
    4. Kế thừa (Inheritence) và mối quan hệ IS-A trong Java #12022
    5. Thuộc tính truy xuất (Access Modifier) trong Java #12011
    6. Tính bao đóng (Encapsulation) trong Java #12014
    7. Nạp chồng (Overloading) và Ghi đè (Overriding) #12017
    8. Đa hình (Polymorphism) #12025
    9. Lớp trừu tượng (Abstract class) #12028
    10. Giao diện (Interface) / Hợp đồng (Contract) trong Java #12031
    11. So sánh giữa Lớp trừu tượng (Abstract class) và Giao diện (Interface) trong Java #12047
    12. Mối quan hệ liên kết (association) và mối quan hệ HAS-A giữa các Lớp (class) #12039
Các bài học

Chương trình học

Bao gồm Module, Chương, Bài học, Bài tập, Kiểm tra...

Chương trình học


  1. Giới thiệu, cài đặt, cấu hình môi trường lập trình 1
    1. Cài đặt trình soạn thảo code Eclipse IDE #10514
  2. Java căn bản 6
    1. Giới thiệu, đặc điểm, lịch sử của ngôn ngữ lập trình Java #11940
    2. Giới thiệu JVM, JRE, JDK trong Java #11947
    3. Viết chương trình Java đầu tiên (java hello world) #11950
    4. Biến (variables) và kiểu dữ liệu nguyên thủy (primitive data types) trong Java #11961
    5. Nhập liệu qua cửa sổ console (input), In ra màn hình qua cửa sổ console (output) #11970
    6. Toán tử (operators) trong Java #11980
  3. Java căn bản - Bài tập 3
    1. Java Core - Lab 1 - Lập trình căn bản #11988
    2. Java Core - Lab 2 - Câu lệnh điều kiện IF ELSE, SWITCH CASE #11993
    3. Java Core - Lab 3 - Vòng lặp FOR, WHILE, DO WHILE #11996
  4. Java hướng đối tượng - Object Oriented Programming (OOP) 12
    1. Gói (packages) trong Java #11999
    2. Lớp (Class) và Thể hiện (Object) trong Java #12005
    3. Hàm khởi tạo (constructor) trong Java #12010
    4. Kế thừa (Inheritence) và mối quan hệ IS-A trong Java #12022
    5. Thuộc tính truy xuất (Access Modifier) trong Java #12011
    6. Tính bao đóng (Encapsulation) trong Java #12014
    7. Nạp chồng (Overloading) và Ghi đè (Overriding) #12017
    8. Đa hình (Polymorphism) #12025
    9. Lớp trừu tượng (Abstract class) #12028
    10. Giao diện (Interface) / Hợp đồng (Contract) trong Java #12031
    11. So sánh giữa Lớp trừu tượng (Abstract class) và Giao diện (Interface) trong Java #12047
    12. Mối quan hệ liên kết (association) và mối quan hệ HAS-A giữa các Lớp (class) #12039

Bài học trước Bài học tiếp theo