So Sánh Abstract class và Interface
Khác nhau
Abstract class:
- Có 1 method abstract không thân hàm: phải khai báo abstract, không thể khai báo private
- Có 1 method có thân hàm: áp dụng được bốn loại phạm vi truy cập, static và final có.
- Khai báo biến: áp dụng được bốn loại phạm vi truy cập
- Khai báo biến: áp dụng được bốn loại phạm vi truy cập
- Class không thể extends nhiều Abstract class.
Interface:
- Có 1 method abstract không thân hàm: không cần khai báo abstract, không thể khai báo private và protected
- Có 1 method có thân hàm: phải là default. default void demo() {}, static và final không.
- Khai báo biến: không thể khai báo.private và protected.
- Khai báo biến: không thể khai báo.
- Class có thể implement nhiều interface.
- Interface có thể extends được nhiều interface.
Giống Nhau
- Khai báo biến static và final đều áp dụng được.
- Method không thân hàm static và final không thể áp dụng.
STT | Lớp trừu tượng | Interface |
---|---|---|
1 | Abstract có thể có các phương thức abstract và non-abstract | Interface chỉ có thể có phương thức abstract |
2 | Abstract không hỗ trợ đa kế thừa | Interface hỗ trợ đa kế thừa |
3 | Abstract 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 | Abstract 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 | Abstract 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 |
6 | Ví dụ: public abstract class Shape{ public abstract void draw(); } | Ví dụ: public interface Drawable{ void draw(); } |
1.Abstract class
1.1.Khái niệm
- Là 1 lớp trừu tượng
- Không dùng để tạo ra đối tượng mà chỉ dùng làm cơ sở cho lớp khác kế thừa
- Ngoài thuộc tính,phương thức bình thường,abstact class có thêm abstact method - phương thức trừu tượng
- Abstact method ko dùng để thực hiện 1 công việc nào mà,nó chỉ là 1 khuôn mẫu.
- Khi 1 class kế thừa Abstract class thì nó bắt buộc phải override lại Abstract method của Abstract class đó
2.Ví dụ
Tạo project Bai16 --> mặc đinh trong netbean sẽ tạo class Bai16 là class chứa hàm main của project
Tạo 1 class bình thường bên ngoài class Bai16 là DemoAbstractClass với nội dung như sau
PHP:
package Bai16;
public abstract class DemoAbstractClass {
abstract void InfoObject(); //có 1 abstract không có thân hàm
public void Description(){
//có 1 method có thân hàm
}
}
PHP:
public class Bai16 extends DemoAbstractClass{
public static void main(String[] args) {
}
@Override
void InfoObject() {
}
}
Hàm InfoObject() chỉ là 1 khuôn mẫu cho các class kế thừa DemoAbstractClass
Tạo 1 đối tượng trong hàm main,chỉnh sửa lại hàm InfoObject theo ý bạn và chạy thử chương trình
PHP:
public class Bai16 extends DemoAbstractClass{
public static void main(String[] args) {
Bai16 obj = new Bai16();
obj.InfoObject();
}
@Override
void InfoObject() {
System.out.println("Day la abstract method,bat buoc phai override no");
}
}
2.Interface - implements
2.1.Khái niệm
Như chúng ta đã biết một lớp trong java chỉ có một siêu lớp (super class) trực tiếp hay một cha duy nhất (đơn thừa kế). Để tránh đi tính phức tạp của đa thừa kế (multi-inheritance) trong lập trình hướng đối tượng, Java thay thế bằng interface. Một lớp có thể kế thừa từ nhiều interface với các lớp khác để thừa hưởng thêm vùng dữ liệu và phương thức của các interface này.
- Interface được khai báo như một lớp. Nhưng các thuộc tính của interface là các hằng (khai báo dùng từ khóa final) và các phương thức của interface là trừu tượng (mặc dù không có từ
khóa abstract).
2.2.Ví dụ
Tạo 2 Interface là DemoInterface và DemoInterface2
Nếu bạn nào chưa biết thì chuột phải vào package -> Java Interface
PHP:
public interface DemoInterface {
void InfoInterface(); //có một method abstract mặc định không có thân hàm
}
PHP:
public interface DemoInterface2 {
void InfoInterface2(); //abstract mặc định nên không cần viết ra
}
Cách kế thừa interface là dùng từ khóa implements
Bắt buộc phải Override các hàm trong Interface khi kế thừa nó
Sửa lại trong class Bai16 như sau
PHP:
public class Bai16 extends DemoAbstractClass implements DemoInterface,DemoInterface2{
public static void main(String[] args) {
Bai16 obj = new Bai16();
obj.InfoObject();
obj.InfoInterface();
obj.InfoInterface2();
}
@Override
void InfoObject() {
System.out.println("Day la abstract method,bat buoc phai override no");
}
@Override
public void InfoInterface() {
System.out.println("Day la ham trong DemoInterface");
}
@Override
public void InfoInterface2() {
System.out.println("Day la ham trong DemoInterface2");
}
}
}
Source code,các bạn down về giải nén và import vào netbean
Cách import:Từ netbean : File -> Open Project -> tìm nơi thư mục bạn vừa giải nén
0 nhận xét:
Post a Comment