Phân biệt lớp abstract và Interface trong Java
Trong bài viết này sẽ nói về những thứ rất quan trọng và sử dụng rất nhiều trong lập trình hướng đối tượng OOP. Đó là abstract class và interface, mời bạn đọc cùng eLib.VN tìm hiểu ví dụ từng cái và phân biệt sự giống và khác nhau giữa chúng qua bài viết dưới đây.
1. So sánh lớp abstract và Interface
Cả lớp abstract và Interface được sử dụng để thu được tính trừu tượng, từ đó chúng ta có thể khai báo các phương thức trừu tượng. Cả lớp trừu tượng và Interface không thể được khởi tạo. Nhưng cũng có các điểm khác nhau giữa lớp trừu tượng và Interface, như sau:
STT | Lớp trừu tượng | Interface |
---|---|---|
1 | Lớp trừu tượng có thể có các phương thức abstract và non-abstract | Interface chỉ có thể có phương thức abstract |
2 | Lớp trừu tượng không hỗ trợ đa kế thừa | Interface hỗ trợ đa kế thừa |
3 | 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 và final |
4 | 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. |
5 | 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 |
6 | 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 |
7 | Ví dụ: public abstract class Shape{ public abstract void draw(); } | Ví dụ: public interface Drawable{ void draw(); } |
Về cơ bản, lớp trừu tượng đạt được trừu tượng hóa một phần (từ 0 tới 100%) trong khi đó Interface có thể đạt được trừu tượng hóa hoàn toàn (100%).
2. Ví dụ về lớp trừu tượng và Interface trong Java
//Tao interface ma co 4 phuong thuc
interface A {
void a(); //theo mac dinh, public va abstract
void b();
void c();
void d();
}
//Tao lop abstract ma cung cap trinh trien khai cua mot phuong thuc cua A interface
abstract class B implements A {
public void c() {
System.out.println("Toi la C");
}
}
//Tao lop con cua lop abstract, bay gio chung ta can cung cap trinh trien khai cho cac phuong thuc con lai
class M extends B {
public void a() {
System.out.println("Toi la a");
}
public void b() {
System.out.println("Toi la b");
}
public void d() {
System.out.println("Toi la d");
}
}
//Tao mot lop Test ma goi cac phuong thuc cua A interface
class Test5 {
public static void main(String args[]) {
A a = new M();
a.a();
a.b();
a.c();
a.d();
}
}
Toi la a
Toi la b
Toi la c
Toi la d
Lưu ý: Các bạn nên chú ý các phương thức của interface là abstract 100%, trong abstract class có thể có phương thức không phải abstract. Trong thiết kế phần mềm, interface thường được dùng để chỉ 2 hay nhiều class cùng làm việc gì đó (ví dụ cùng in - Printable), trong khi abstract class thường hướng đến quan hệ cha con trong lập trình hướng đối tượng.
Trên đây là bài viết so sánh giữa lớp abstract và Interface. Trên cơ sở lý thuyết là vậy, nhưng muốn hiểu rõ hơn và áp dụng vào công việc bạn cần nghiên cứu kỹ và đào sâu thêm kiến thức. Chúc các bạn thành công!
Tham khảo thêm
- doc Đối tượng và lớp (class) trong Java
- doc Phương thức trong Java
- doc Nạp chồng phương thức trong Java
- doc Constructor trong Java
- doc Từ khóa static trong Java
- doc Từ khóa this trong Java
- doc Tính kế thừa trong Java - Từ khóa extends và implements trong Java
- doc Ghi đè phương thức trong Java
- doc Kiểu trả về covariant trong Java
- doc Từ khóa super trong Java
- doc Từ khóa final trong Java
- doc Tính đa hình trong Java
- doc Gắn kết tĩnh và Gắn kết động (Dynamic Binding) trong Java
- doc Toán tử instanceof trong Java
- doc Tính trừu tượng trong Java
- doc Abstract Class trong Java
- doc Interface trong Java
- doc Package trong Java
- doc Các kiểu Modifier trong Java
- doc Access Modifier trong Java
- doc Non Access Modifier trong Java
- doc Tính đóng gói trong Java
- doc Lớp Object trong Java
- doc Nhân bản đối tượng trong Java
- doc Mảng (Array) trong Java
- doc Lớp Wrapper trong Java
- doc Truyền giá trị và tham chiếu trong Java
- doc Từ khóa strictfp trong Java
- doc Regular Expression trong Java