22
GIAO DI N (INTERFACE) Ging viên: ĐNgc Như Loan

GIAO DIỆN (INTERFACE) · INTERFACE Giao diện là ràng buộc, giao ướcđảm bảo cho các lớpkếthừanó phảituân thủvà thựchiện. Một giao diện giống

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

  • GIAO DIỆN

    (INTERFACE)

    Giảng viên: Đỗ Ngọc Như Loan

  • INTERFACE

    Giao diện là ràng buộc, giao ước đảm bảo cho các

    lớp kế thừa nó phải tuân thủ và thực hiện.

    Một giao diện giống như một lớp chỉ chứa các

    phương thức trừu tượng.

    Khi một lớp thực thi một giao diện, lớp này phải thực

    thi tất cả các phương thức của giao diện.

    Ví dụ: Interface: IBay, IChay=> MayBay, Chim sẽ có cùng interface là IBay. Rõ

    ràng mặc dù MayBay, Chim có cùng cách thức hoạt

    động là bay nhưng chúng khác nhau về bản chất.

    => MayBay cũng có interface là IChay

  • [thuộc tính truy xuất] interface

    {

    // các thuộc tính

    // các phương thức không có phần thựcthi

    }

    KHAI BÁO GIAO DIỆN

  • THỰC THI GIAO DIỆN

    [thuộc tính truy xuất] class implements , , …

    {

    // thực thi tất cả các phương thức trong giaodiện

    // chứa các thuộc tính và phương thức riêng

    }

  • //khai bao interface Bay

    public interface IBay {

    void Bay();

    }

    //Lớp Chim thừa kế interface IBaypublic class Chim implements IBay {

    public void Bay() {

    System.out.println("Chim: Bay");

    }

    }

    //Lớp MayBay thừa kế interface IBaypublic class MayBay implements IBay {

    public void Bay() {

    System.out.println("May Bay: Bay");

    }

    }

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

    Chim chim = new Chim();

    chim.Bay();

    MayBay maybay = new MayBay();

    maybay.Bay();

    }

  • GHI CHÚ

    Thông thường tên của giao diện được bắt đầu với chữ I hoa

    (không bắt buộc nhưng việc đặt tên như vậy rõ ràng và dễ

    hiểu, tránh nhầm lẫn với các thành phần khác).

    Giao diện không chứa biến, không có constructors

    Mặc định thì các thuộc tính bên trong giao diện sẽ

    là public, static và final

    Không thể tạo thể hiện (instance) của giao diện.

    Mặc định các thành viên của giao diện là public.

  • GHI CHÚ

    Dù không khai báo từ khoá abstract, nhưng mọi hàm

    trong 1 interface đều được coi là abstract (trừu tượng)

    Ngôn ngữ Java không cho phép 1 lớp kế thừa nhiều lớp

    nhưng có thể thực thi nhiều hơn một giao diện.

    Nếu 1 lớp vừa kế thừa 1 lớp khác vừa thực thi giao diện

    thì từ khóa extends sẽ đứng trước implements.

  • public interface IBay {

    void Bay();

    }

    public interface IChay {

    void Chay();

    }

    public class Chim implements IBay {

    public void Bay() {

    System.out.println("Chim: Bay");

    }

    }

    public class MayBay implements IBay,IChay {

    public void Bay() {

    System.out.println("May Bay: Bay");

    }

    public void Chay() {

    System.out.println("May Bay: Chay");

    }

    }

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

    Chim chim = new Chim();

    chim.Bay();

    MayBay maybay = new MayBay();

    maybay.Bay();

    maybay.Chay();

    IBay isBay = (IBay)maybay;

    isBay.Bay();

    IChay isChay = (IChay)maybay;

    isChay.Chay();

    }

  • MỞ RỘNG GIAO DIỆN

    Chúng ta có thể mở rộng (thừa kế) một giao diện

    đã tồn tại bằng cách thêm vào đó những phương

    thức hoặc thành viên mới.

  • VÍ DỤ

    //mở rộng interface IBay

    public interface IBayCao extends IBay {

    void docao(); // cho biết độ cao của đối tượng bay

    }

  • KẾT HỢP GIAO DIỆN

    Có thể tạo giao diện mới bằng cách kết hợp các giao

    diện cũ và ta có thể thêm các phương thức hay các

    thuộc tính cho giao diện mới.

  • VÍ DỤ

    public interface IBay {

    void Bay();

    }

    public interface IChay {

    void Chay();

    }

    //kết hợp interface IBay và IChay

    public interface IHoatDong extends IBay,IChay {

    void vantoc(); // cho biết vận tốc

    }

  • public class MayBay implements IHoatDong {

    int vantoc;

    public MayBay(int v) { vantoc = v; }

    @Override

    public void Bay() {

    System.out.println("May Bay: Bay"); }

    @Override

    public void Chay() {

    System.out.println("May Bay: Chay"); }

    @Override

    public void vantoc() {

    System.out.println(“Van toc: “+vantoc); }

    }

    public class Main {

    public static void main(String[] args) {

    MayBay m = new MayBay(1000);

    m.Bay();

    m.Chay();

    m.vantoc();

    }

    }

  • Khi thực thi nhiều giao diện có cùng phương thức, phầnthực thi phương thức sẽ sử dụng chung cho cả 2 giao diện.

    Ví dụ:

    public interface IBay {

    void Bay(); void Stop();

    }

    public interface IChay {

    void Chay(); void Stop();

    }

    public class MayBay implements IBay,IChay {

    public void Bay() { System.out.println("May Bay: Bay"); }

    public void Chay() { System.out.println("May Bay: Chay"); }

    public void Stop() {

    System.out.println(“Ngung");

    }

    }

  • LUYỆN TẬP

    o Thiết kế interface IXuat có phương thức trừu tượngxuat() (dùng để xuất ra các thông tin của đối tượng).

    o Thiết kế lớp TaiLieu thực thi interface IXuat, lớp nàycó thuộc tính tên; hàm thiết lập 1 tham số

    o Thiết kế lớp Sach kế thừa lớp TaiLieu và có thêmthuộc tính tác giả, số trang, hàm thiết lập 3 tham số, override phương thức xuat()

    o Thiết kế lớp Dia kế thừa lớp TaiLieu và có thêmthuộc tính dung lượng, hàm thiết lập 2 tham số, override phương thức xuat()

    o Thiết kế lớp DSTaiLieu, có các phương thức thêm, sửa, xóa, tìm kiếm và xuất danh sách.

  • LUYỆN TẬPclass QuanLyTL {

    DSTaiLieu dstl = new DSTaiLieu();

    public void menu() {

    /* hiện menu như sau và thực hiện chức năng tùy theo lựa chọncủa user (dùng switch case)

    1. Thêm tài liệu

    2. Sửa tài liệu

    3. Xóa tài liệu

    4. Tìm kiếm tài liệu

    5. Xuất danh sách tài liệu

    6. Thoát */

    }

    }

    class DSTL_Test{

    public static void main(String [] args)

    QuanLyTL ql1=new QuanLyTL();

    ql1.menu();

    }

  • ĐỌC DỮ LIỆU TỪ FILE TEXTimport java.io.FileReader;

    import java.io.BufferedReader;

    public class ReadFile {

    public static void main(String[] args) {

    try {

    BufferedReader input = new BufferedReader(new FileReader("data.txt"));

    String line = input.readLine();

    while (line != null) {

    System.out.println(line);

    line = input.readLine();

    }

    input.close();

    } catch (Exception ex) {

    ex.printStackTrace();

    }

    }

    }

  • import java.io.FileReader;

    import java.io.BufferedReader;

    public class ReadFile {

    public static void main(String[] args) {

    try {

    BufferedReader input = new BufferedReader(new FileReader("data.txt"));

    String line = input.readLine();

    while (line != null) {

    // chia chuỗi thành các chuỗi con phân cách bởi dấu phẩy

    String[] arr = line.split(",");

    for (int i = 0; i

  • GHI DỮ LIỆU VÀO FILE TEXT

    import java.io.FileWriter;

    public class WriteFile {

    public static void main(String args[]) {

    try {

    FileWriter fw = new FileWriter(“data.txt”);

    fw.write("Welcome to java.");

    fw.close();

    } catch (Exception e) {

    System.out.println(e);

    }

    }

    }

  • LUYỆN TẬPclass QuanLyTL {

    DSTaiLieu dstl = new DSTaiLieu();

    public void menu() {

    /* hiện menu như sau và thực hiện chức năng tùy theo lựa chọn của user (dùngswitch case)

    1. Thêm tài liệu

    2. Sửa tài liệu

    3. Xóa tài liệu

    4. Tìm kiếm tài liệu

    5. Xuất danh sách tài liệu

    6. Tải danh sách tài liệu từ file // đọc file lưu vào ds tài liệu

    7. Xuất danh sách tài liệu ra file // ghi ds tài liệu hiện tại ra file

    8. Thoát */

    }

    }