Chúng ta đã học về Class trong lập trình hướng đối tượng vậy sử dụng Class không đã đủ chưa? Tại sao lại sinh ra thêm một ông Abstract class làm gì nữa ? Thêm một ông Interface không phải là class nhưng chí ít cũng có các phương thức hoạt động ?
Trong cuộc sống thường ngày, sự vật, hiện tượng xung quanh chúng ta có rất nhiều vì vậy một Class đơn lẻ sẽ rất khó có thể mô tả được hết các thuộc tính và phương thức của nhiều class khác nhau. Các class luôn luôn có những thuộc tính và phương thức tương tự nhau, vậy từ những cái tương tự như vậy tại sao ta không tận dụng các cái có sẵn đó để viết tiếp cho những class chưa có hoặc thiếu các thuộc tính và phương thức chúng ta cần triển khai trong công việc, để tiết kiệm tài nguyên, chi phí, công sức. Đó là lý do ông cố cố nội Abstract class ra đời bản thân nó có chữ class thì nó chính là một class nhưng nó rất trừu tượng nó vẽ ra một cái thuộc tính hay phương thức chung nhất cho các lớp con có thể kế thừa nó. Ví dụ Abstract class Shape rất chung chung, ta không thể hình dung được nó là Shape gì, còn Class Circle, Class Retangle… nhìn vào thôi các bạn cũng nghĩ được ngay nó có hình dạng ra sao rồi.
Vậy Abstract class có thể được hiểu nôm na là một lớp trừu tượng, được xây dựng lên như là một lớp “cha” cho các lớp “con ” có cùng bản chất (properties, method);
– Nó là một class nên các lớp “con” sẽ kế thừa được lớp “cha” với từ khóa là “extends” đây là loại kế thừa đơn (single inheritance ); trong khi interface hỗ trợ đa kế thừa vì các đối tượng khác nhau nhưng có hành vi tương tự nhau thì đều được kế thừa với một ông interface này rồi nó lại có một hành vi khác giống một ông interface khác thì nó lại được nối kế thừa sang ông interface khác.
– Abstract class có thể khai báo được các thuộc tính và phương thức vì nó là một class; trong khi Interface nó không định nghĩa được các thuộc tính khởi tạo vì nó không là một class.
– Các method trong Abstract class nếu được định nghĩa với abstract Method thì phần thân của nó sẽ không có và bắt buộc các lớp con phải override lại Abstract class để viết tiếp nên các chức năng cho Method đó; Interface cũng tương tự như vậy, trong phần thân khi viết code sẽ báo lỗi, các lớp “con ” khi kế thừa phải định nghĩa lại toàn bộ các Method trong interface trước đó.
– Abstract class khác với các class khác ở chỗ nó không khởi tạo được đối tượng.
– Visibility của Abstract là đầy đủ Access Modifier, còn của Interface là only public.
Sơ qua sự khác nhau và ý nghĩa ra đời của Abstract class và interface là như vậy, các câu cú có thể lủng củng, sẽ được trau chuốt hơn trong quá trình tôi luyện….