Thứ Bảy, 10 tháng 3, 2012

Thế nào là Abstract class và Interface ?

Thế nào là Abstract class và Interface ?



1.Abstract class:


Hẳn các bạn đã biết rất rõ về C++ và cũng không lạ gì khái niệm về tính đa hình thông qua việc sử dụng 1 từ khoá gọi là Virtual.



Trong Java có 1 loại lớp gọi là abstract class mang nghĩa gần giống virtual. Abstract class định nghĩa các thuộc tính và hành vi cho những lớp khác. Nó thường được tạo như là lớp cha (base class) để các lớp cùng loại kế thừa nó.

Ví dụ:

abstract class Hinh

{

………...

}

Không như các class thông thường, abstract class không hề có đối tượng, nghĩa là bạn không thể tạo 1 đối tượng của abstract class bằng từ khoá new. Mục đích duy nhất của Abstract class là để các lớp khác kế thừa nó.

Ví dụ:

Public class Hinh{….}

Hinh hObj = new Hinh(); // Đúng

abstract class Hinh {….}

Hinh hObj = new Hinh();// Sai



Các hàm trong abstract class đều là các hàm abstract ( = hàm virtual bên C++) và có phạm vi Public. Các hàm này sẽ được định nghĩa lại trong các lớp kế thừa.



Ví dụ: Class HinhTron kế thừa (extends) class Hinh

abstract class Hinh

{

public abstract float TinhDienTich();

}



public class HinhTron extends Hinh

{

private float bankinh;

public float TinhDienTich()

{

return bankinh*bankinh * 3.14;

}

}

Đây chính là cách thể hiện tính đa hình trong Java.



2.Interface:

Interface là 1 lớp bao gồm biến hằng và các hàm được khai báo trước nhưng không được định nghĩa, nghĩa là các hàm này không hề có thân (body)

Interface chứa các hành vi chuẩn (standard behavior) được thực hiện bởi bất kì lớp nào trong hệ thống phân cấp lớp. Nghĩa là các hàm trong interface có thể được thực hiện bởi các lớp không có liên hệ gì đến nó.



- Một lớp thi hành các hàm trong interface thông qua từ khoá implements.

- Một lớp có thể implements nhiều interface.

- 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)

- Các biến trong Interface thì phải là public, static hay final.

- Không được khai báo private hay protected đối với các biến và các hàm trong Interface vì các hàm này sẽ được viết lại (overriden) trong lớp thực thi nó.

- Hàm trong interface không thể là final.



Ví dụ: Class 00c1 implements(thi hành) 2 interface InAn và ThongBao.



interface InAn

{

public string inPhieuThucHanh(); // Have no body

in method

}

interface ThongBao

{

public void ThongBaoCuoiTuan();

}



public class 00c1 implements InAnh, ThongBao

{

public string inPhieuThucHanh()

{

return “Phieu thuc hanh cua lop 00c1”;

}

public void ThongBaoCuoiTuan()

{

System.out.print(“Chung ta se nghi hoc”);

}

}



Chú ý: Ở phía trên các bạn có chú ý 1 từ khoá gọi là final.

- Một biến được khái báo là final, thì giá trị của nó sẽ không bị thay đổi bởi bất kì lớp nào, kể cả class đang chứa nó.

- Một hàm khai báo là final thì nó sẽ không bị overriden(viết lại) bởi bất kì class nào khác. Chính vì thế mà hàm trong interface không thể là final

1 nhận xét:

  1. Casino de Monte Carlo (Chester) - MapyRO
    Casino de Monte Carlo (Chester) 평택 출장안마 - Las Vegas, 전주 출장샵 Nevada. A map showing casinos 충주 출장마사지 and other gaming facilities 김제 출장마사지 located in Las Vegas, Nevada. 창원 출장샵

    Trả lờiXóa