Saturday, December 26, 2015

So Sánh Sự Khác Nhau Giữa Abstract và Interface

Abstract class (Lớp trừu tượng) có thể hiểu là  một class cha cho tất cả các Class có cùng bản chất. Do đó mỗi lớp con chỉ có thể kế thừa từ một lớp trừu tượng. Abstract class không cho phép tạo các thể hiện ( instance), vì vậy bạn không thể khởi tạo một đối tượng trực tiếp từ một Abstract class.

Interface có thể được xem như một mặt nạ cho tất cả các Class cùng cách thức hoạt động nhưng có thể khác nhau về bản chất. Từ đó lớp con có thể kế thừa từ nhiều Interface để bổ sung đầy đủ cách thức hoạt động của mình (đa kế thừa - Multiple inheritance).
1. Điểm chung:
- Cả hai đều dùng để khai báo các phương thức trừu tượng
- Cả hai đều không thể khởi tạo được

2. Điểm khác:
Về cơ bản là Abstract class có thể bao gồm các phương thức trừu tượng từ 0%-100%, Interface thì tất cả các phương thức đều là trừu tượng.

1) 
Abstract class can have abstract and non-abstract methods.
Interface can have only abstract methods.
2) 
Abstract class doesn't support multiple inheritance.
Interface supports multiple inheritance.
3) 
Abstract class can have final, non-final, static and non-static variables.
Interface has only static and final variables.
4) 
Abstract class can have static methods, main method and constructor.
Interface can't have static methods, main method or constructor.
5) 
Abstract class can provide the implementation of interface.
Interface can't provide the implementation of abstract class.
6) 
The abstract keyword is used to declare abstract class.
The interface keyword is used to declare interface.

Ví dụ:
- Abstract class ConVat có các lớp con Chim, Ca.
- Abstract class MayMoc có các lớp con MayBay, Thuyen
- Interface: iBay, iBoi, iChay.
=> MayBay, Chim sẽ có cùng Interface là iBay. Rõ ràng mặc dù MayBay, Chim có cùng cách thức hoạt động là bay nhưng chúng khác nhau về bản chất.
=> MayBay cũng có interface là iChay nhưng Chim không thể nào kế thừa thêm abstract class MayMoc

Nhìn chung cả 2 đều là "bản thiết kế" cho các lớp dẫn xuất, do đó chúng chỉ chứa các khai báo Properties và Method mà không quan tâm bên trong thực hiện những gì. Nhưng cụ thể thì Abstract Class là "bản thiết kế" cho Class còn Interface là "bản thiết kế" cho Method.



No comments:

Post a Comment