Sự khác nhau giữa Abstract class với Interface trong Java.

Sự khác nhau giữa Abstract class với Interface trong Java

Abstract Class – Interface

Bạn vẫn nghe trong Java không hỗ trợ đa thừa kế (nhằm tránh sự phức tạp, xung đột code)

và để nhằm khắc phục vấn đề đó ta dùng interface (Cho phép nhiều class implements nhiều interface).

Vậy sự khác nhau giữa abstract class với interface là gì, cách dùng chúng trong mỗi trường hợp ra sao?

1. Ý nghĩa của abstract class và interface

  • abstract class:

Bạn nên nhớ Java là ngôn ngữ hướng đối tượng, dùng abstract class nó mang ý nghĩa là thừa kế bản chất của đối tượng.
Ví dụ Student extends Personhoàn toàn hợp lý vì học sinh và người đều cùng bản chất, nhưng Student extends Car lại không hợp lý, vì học sinh và ô tô khác hoàn toàn nhau về bản chất.
Sự khác nhau giữa Abstract class với Interface trong Java.

  • interface:

Khi nói tới interface người ta thường dùng cho hành động nhiều hơn

Với abstract class thì người ta sẽ gộp chung các thuộc tính lại, còn với interface thì người ta sẽ gộp chung các hành động lại.

Ví dụ Student implements Run học sinh có thể thực hiện hành động chạy, Student implements Eat học sinh có thể thực hiện hành động ăn –> Student implements Run, Eat học sinh có thể thực hiện cả 2 hành động là chạy và ăn –> hoàn toàn hợp lý
Sự khác nhau giữa Abstract class với Interface trong Java
Túm lại:

  • Abstract class thiên về bản chất của đối tượng (các thuộc tính)
  • Interface thiên về các hành động của đối tượng (các method).

 

2. Sự khác nhau trong cài đặt abstract class và interface

Từ ý nghĩa mà abstract class với interface cũng có những khác nhau trong cài đặt:

Abstract class Interface
1 abstract class chỉ có thể extends 1 và chỉ một class /abstract class khác 1 interface có thể extends nhiều interface khác; interface chỉ có thể extends interface không thể extends class
Trong abstract class có thể có concrete method hoặc abstract method Trong interface, mọi method đều là abstract method

(*Từ Java 8 cho phép thêm method không phải là abstract vào interface bằng từ khóa default)

Trong abstract class khi muốn tạo abstract method bắt buộc phải có từ khóa abstract  Từ khóa abstract có thể có hoặc không.
abstract method trong abstract class có thể là public hoặc protected abstract method trong abstract class chỉ có thể là public

(*Từ Java 9 cho phép thêm method private và private static vào Interface)

Trong abstract class, các thuộc tính có thể final, static, public, private, protected Trong Interface, mọi thuộc tính đều là public static final

 

Sự khác nhau giữa Abstract class với Interface trong Java.

References:

https://docs.oracle.com/javase/tutorial/java/IandI/abstract.html

stackjava.com