Đề Xuất 2/2023 # Sự Khác Nhau Giữa Abstract Class Với Interface Trong Java. # Top 5 Like | Cuocthitainang2010.com

Đề Xuất 2/2023 # Sự Khác Nhau Giữa Abstract Class Với Interface Trong Java. # Top 5 Like

Cập nhật nội dung chi tiết về Sự Khác Nhau Giữa Abstract Class Với Interface Trong Java. mới nhất trên website Cuocthitainang2010.com. Hy vọng thông tin trong bài viết sẽ đáp ứng được nhu cầu ngoài mong đợi của bạn, chúng tôi sẽ làm việc thường xuyên để cập nhật nội dung mới nhằm giúp bạn nhận được thông tin nhanh chóng và chính xác nhất.

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.

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.

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

Sự Khác Nhau Giữa Abstract Class Và Interface Trong Java?

Đây là một câu hỏi khá thú vị với vị trí junior java developer mà bất kì nhà tuyển dụng- NTD nào cũng đưa ra trong buổi phỏng vấn. Bài viết này, tôi sẽ giải thích chi tiết về sự khác nhau giữa hai khái niệm này.

Sự khác nhau giữa Abstract Class và Interface trong Java?

Abstract class và interface là một trong những phần core của ngôn ngữ lập trình Java và việc lựa chọn giữa asbtract class và interface trong thiết kế hệ thống là quyết đinh của một người – một team thiết kế hệ thống.

Và sự khác biệt giữa abstract class và interface được liệt kê như sau:

Abstract class có thể có nhiều method đã được implementation, trong khi interface chỉ define ra những abstract method (không thực hiện implementation).

Abstract class có thể có những contractor, trong khi interface không có bất kỳ một contractor nào.

Abstract class có tất cả tính năng của một java class bình thường, ngoại trừ việc instantiate nó. Interface chỉ được phép khai báo method và public static final constants.

Method của abstract class có thể sử dụng những access modifiers như private, protected, default, public, static nhưng method của interface chỉ sử dụng public và asbtract.

Một subclass chỉ có thể extend duy nhất một abstract class nhưng một class có thể implement nhiều interface.

Những abstract class có thể extend abstract class khác và implement nhiều interface, nhưng một interface chỉ có thể extend nhiều interface.

Có thể thực hiện run một abstract class nếu nó có một main() method, ngược với interface thì không.

Interfaces được sử dụng để define contract cho những class implement, abstract class cũng thực hiện define contract nhưng nó cung cấp một cách thức implementations có săn để subclass sử dụng.

Java không hỗ trợ “multiple class level inheritance”, do đó, mọi class chỉ có thể có một super class. Nhưng một class lại có thể implement nhiều interface. Do vậy, trong hầu hết các trường hợp, interface là một sự lựa chọn đúng đắn cho việc cung cấp base contract cho class hierarchy.

Nếu có nhiều method trong contract, thì bạn nên sử dụng abstract class vì nó cung cấp sẵn implementation cho một vài common method được áp dụng cho tất cả các subclasses.

Nếu contract của bạn thay đổi liên tục thì sử dụng interface có thể gặp những vấn đề bởi vì nó không thể thêm những method trong interface mà không thay đổi ở phía class thực hiện implement nó. Với abstract thì bạn không cần lo lắng điều này, do đó trong tình huống này thì sử dụng abstract là một giải pháp hiệu quả.

Cách sử dụng hiệu quả nhất?

Trong thực tế, việc sử dụng cả abstract class và interface là một phương pháp tiếp cận hiệu quả cho việc thiết kế hệ thống. Ví dụ như trong JDK, List là một interface có rất nhiều method, nhưng vẫn có song song một abstract class đó là AbstractList, nó cung cấp những skeletal implementation cho tất cả method của List interface, do đó, mọi subclass có thể extend class này và chỉ implement những method cần thiết.

Chúng ta nên luôn luôn bắt đầu bằng một interface như một base và define những method mà mọi subclasses nên thực hiện và sau đó nếu có một số method mà chỉ subclass nhất định phải implement, chúng ta có thể extend base interfacec này với các method mới đó. Các subclasses sẽ có tùy chọn để lựa chọn giữa base interface hoặc child interface để thực hiện những yêu cầu của nó. Nếu số lượng method phát triển nên nhiều, ý tưởng mới là sử dụng một abstract class để cung cấp ra bộ skeletal để imlement các child interface và cung cấp sự linh hoạt cho các subclass lựa chọn giữa abstract class hoặc interface.

Từ JDK 8 trở đi, bạn có thể có nhiều implement method trong nhiều interface. Tức là bạn có thể tạo ra mặc định như những static method trong những interface và cung cấp implementation cho chúng. Điều này sẽ thu hẹp khoảng cách giữa interface và abstract class, và bây giờ, interface là các thực hiện tốt nhất. Để biết thêm chi tiết về điểm thay đổi này trên JDK 8, bạn vui lòng đọc tài liệu JDK 8

Sự Khác Nhau Giữa Abstract Class Và Interface

Sự khác nhau giữa Abstract class và Interface

Abstract class và interface đều được sử dụng để có được sự trừu tượng mà ở đó chúng ta có thể khai báo các phương thức trừu tượng. Nhưng có một vài sự khác nhau giữa abstract class và interface được liệt kê trong bảng sau:

Abstract class Interface

1) Abstract class có phương thức abstract (không có thân hàm) và phương thức non-abstract (có thân hàm).

Interface chỉ có phương thức abstract. Từ java 8, nó có thêm các phương thức default và static.

2) Abstract class không hỗ trợ đa kế thừa.

Interface có hỗ trợ đa kế thừa

3) Abstract class có các biến final, non-final, static and non-static.

Interface chỉ có các biến static và final.

4) Abstract class có thể cung cấp nội dung cài đặt cho phương thức của interface.

Interface không thể cung cấp nội dung cài đặt cho phương thức của abstract class.

5) Từ khóa abstract được sử dụng để khai báo abstract class.

Từ khóa interface được sử dụng để khai báo interface.

6) Ví dụ: public abstract class Shape { public abstract void draw(); }

Ví dụ: public interface Drawable { void draw(); }

Đơn giản để hiểu, đó là abstract class có được trừu tượng 1 phần (0 tới 100%), còn interface có được trừu tường toàn phần (100%).

Ví dụ về abstract class và interface trong java

Ví dụ sau là sự kết hợp giữa abstract class và interface.

interface A { void a(); abstract void b(); public void c(); public abstract void d(); } abstract class B implements A { public void c() { System.out.println("I am C"); } } class M extends B { public void a() { System.out.println("I am a"); } public void b() { System.out.println("I am b"); } public void d() { System.out.println("I am d"); } } public class Test5 { public static void main(String args[]) { A a = new M(); a.a(); a.b(); a.c(); a.d(); } }

Output:

I am a I am b I am C I am d

Sự Khác Nhau Giữa Interface Với Abstract Và Cách Sử Dụng Chúng Trong Java.

Tổng quan

Trong java, chúng ta có class abstract và một Interface, ai cũng biết một class có thể impements nhiều Interface và chỉ kế thừa được một class abstract. Nhưng bạn thực sự đã biết khi nào thì ta dùng Interface, khi nào dùng Abstract. Chưa kể bắt đầu từ Java 8 có sự thay đổi về Interface càng làm khó phân biệt giữa hai loại này.

Trong bài viết này chúng tôi sẽ đi so sánh một số tính chất của 2 loại này, sau đó là đưa ra ví dụ đơn giải để các bạn hình dung rõ nhất. Cuối cùng là hiểu khi nào thì dùng chúng.

Sự khác nhau giữa Interface và Abstract

Methods: Class abstract có các phương thức abstract và non-abstract. Trong khi Interface chỉ có phương thức abstract, từ Java 8, thì Interface có thêm 2 loại phương thức là default và static.

Variables: Class abstract có thể có các biến final, non-final, static và non-static. Trong khi Interface chỉ có các biến static và final.

Implementation: Class abstract có thể implement các Interface. Trong khi Interface thì không thể implement class abstract.

Inheritance: Class abstract có thể kế thừa được một class khác. Trong khi Interface có thể kế thừa được nhiều Interface khác.

Accessibility: các thành viên trong Interface kiếu mặc định là public. Trong khi class abstract thì lại có thể là private, protected,..

Abstract là gì?

Abstract(trừu tượng) nghĩa là một cái gì đó không hoàn toàn cụ thể, nó chỉ là một ý tưởng hoặc ý chính của một cái gì đó mà không có bản triển khai cụ thể. Vì vậy Class abstract chỉ là một cấu trúc hoặc hướng dẫn được tạo cho các class cụ thể khác.

Chúng ta có thể nói rằng một class abstract là linh hồn của một class cụ thể, và rõ ràng một cơ thể (class) không thể có hai linh hồn. Đây cũng là lý do Java không hỗ trợ nhiều kế thừa cho các class abstract.

Hãy nhìn vào class abstract sau: Xe.class

Chúng tôi tạo một class abstract Xecó thuộc tính là động cơ, và các phương thức khởi động/ dừng động cơ. Xe là một cái gì đó không cụ thể, nó có thể là ô tô, xe máy, … và rõ ràng không có Xe nào mà không tồn tại động cơ và cơ chế khởi động/dừng động cơ cả.

Interface là gì?

Interface (Giao diện) là một hình thức, giống như một hợp đồng, nó không thể tự làm bất cứ điều gì. Nhưng khi có một class ký kết hợp đồng (implement Interface) này, thì class đó phải tuân theo hợp đồng này.

Trong Interface, chúng tôi định nghĩa các hành vi của một class sẽ thực hiện. Một class có thể có một số cách hành vi khác nhau, cũng giống như nó có thể ký kết được với nhiều hợp đồng khác nhau. Đó cũng là lý do tại sao Java cho phép implement nhiều Interface.

Tiếp nối ví dụ trên, Xe có thể di chuyển, vì vậy chúng tôi tạo một Interface Hành động di chuyển và class Oto implement nó.

HanhDongDiChuyen.class

Đây là những hành vi của Oto, chứ không thuộc tính sẵn có của nó: Ôtô là xe hơi, ngay cả khi nó không thể di chuyển được!

Khi nào nên dùng?

Class abstract đại diện cho mối quan hệ “IS – A” (Ôtô là Xe)

Interface đại diện cho mối quan hệ “like – A” (Ô tô có thể chuyển động).

Tạo một class abstract khi bạn đang cung cấp các hướng dẫn cho một class cụ thể.

Tạo Interface khi chúng ta cung cấp các hành vi bổ sung cho class cụ thể và những hành vì này không bắt buộc đối với clas đó.

Kết luận

All Rights Reserved

Bạn đang đọc nội dung bài viết Sự Khác Nhau Giữa Abstract Class Với Interface Trong Java. trên website Cuocthitainang2010.com. Hy vọng một phần nào đó những thông tin mà chúng tôi đã cung cấp là rất hữu ích với bạn. Nếu nội dung bài viết hay, ý nghĩa bạn hãy chia sẻ với bạn bè của mình và luôn theo dõi, ủng hộ chúng tôi để cập nhật những thông tin mới nhất. Chúc bạn một ngày tốt lành!