28 October 2018

So Sánh sự khác nhau giữa Abstract và Interface trong Java

So Sánh 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 để nhằm khắc phục chúng ta dùng interface. Cho phép nhiều class implements nhiều interface.

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

  • abstract class:
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.
  • interface:
Nói tới interface người ta thường dùng cho hành động nhiều hơn
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ý
  • 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. Khác nhau trong abstract class và interface

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
28/10/2018

0 nhận xét:

Post a Comment

 

BACK TO TOP

Xuống cuối trang