24 July 2016

Bài 16-b: Abstract class,Interface - implements trong java

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
- 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 protected.
- 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.

STTLớp trừu tượngInterface
1Abstract có thể có các phương thức abstract và non-abstractInterface chỉ có thể có phương thức abstract
2Abstract không hỗ trợ đa kế thừaInterface hỗ trợ đa kế thừa
3Abstract có thể có các biến final, non-final, static và non-staticInterface chỉ có các biến static và final
4Abstract có thể có phương thức static, phương thức main và constructorInterface không thể có phương thức static, main hoặc constructor.
5Từ khóa abstract được sử dụng để khai báo lớp trừu tượngTừ khóa interface được sử dụng để khai báo Interface
6Abstract có thể cung cấp trình triển khai của InterfaceInterface không cung cấp trình triển khai cụ thể của lớp abstract
6Ví 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
    }
}
Trong class Bai16 ,cho kế thừa class DemoAbstractClass,chương trình sẽ báo lỗi nếu như bạn không override phương thức InfoObject() của class DemoAbstractClass


PHP:
public class Bai16 extends DemoAbstractClass{

    public static 
void main(String[] args) {
    }

    @
Override
    void InfoObject
() {

    }

}
Đối với hàm Description,nó chỉ là 1 hàm bình thường,do đó bạn có thể override hoặc không
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
}
Nhờ Interface,chúng ta đã giải quyết được vấn đề đa kế thừa trong java
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");
    }


}

}
Chạy thử và xem kết quả

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

 

BACK TO TOP

Xuống cuối trang