Chắc hẳn mọi lập trình viên đều đã quá quen với lập trình hướng đối tượng, nhưng với Abstract Class và Interface bạn có thực sự hiểu chúng?Rất nhiều người trong số chúng ta đã sử dụng nhưng lại chưa thực sự hiểu bản chất, chúng ta cùng nhau tìm hiểu rõ hơn về Abstract Class và Interface để có thể ứng dụng chúng tốt hơn nhé.
Bạn đang xem: Abstract là gì
Abstract Class là gì ?
Nó là một classNó chứa phương thức trừu tượngCác class khi kế thừa một abstract class sẽ phải định nghĩa lại các phương thức trừu tượng của abstract classMột class chỉ có thể kế thừa 1 lớp trừu tượngCó 2 loại method là abstract method và method thường:abstract method là method trống không có thực thi.method thường là method có thực thi.không thể khởi tạo đối tượng của abstract classKhông hỗ trợ đa kế thừa.Phương thức abstract của abstract class không được phép khai báo nội dung phương thức. Nó chỉ có thể định nghĩa tên cũng như các tham số đầu vào.Mức truy cập các hàm của abstract phải ở public hoặc protected để lớp kế thừa có thể định nghĩa lại và các thuộc tính của lớp abstract không được khai báo abstract.Ví dụ : khai báo 1 abstract class
abstract class BaseClass{ // phương thức ở mức protected abstract protected function hello(); // Phương thức ở mức public abstract public function hi();}Ví dụ : Lớp kế thừa từ lớp abstract
abstract class Person{ protected $ten; protected $cmnd; protected $namsinh; abstract public function showInfo();}// class extends cần phải viết lại đầy đủ các hàm abstractclass SinhVien extends Person{ public function showInfo(){ }}
Interface là gì ?
Interface là một Template (khuôn mẫu), nó không phải là một lớp đối tượng.Để khai báo một Interface ta dùng từ khóa interface để thay cho từ khóa class.Tất cả các hàm trong interface đều ở dạng khai báo và không được định nghĩa (giống lớp abstract).Là cấu trúc trong OOP cho phép các class khác có thể implements.Một đối tượng implement một interface thì nó phải khai báo và định nghĩa tất cả các hàm trong Interface.Interface không thể khởi tạo.Phương thức trong Interface bắt buộc toàn bộ là các phương thức trừu tượng.Các phương thức trong Interface chỉ có thể được định nghĩa với khả năng là public và cũng không được định nghĩa nội dung.Interface có thể được extends với nhau.1 class có thể implements nhiều Interface.Ví dụ”; }}class Person implements MoveInterface{ public function run () { echo “Loài người đi bằng 2 chân”; }}class Car implements MoveInterface{ public function run () { echo “Xe hơi chạy bằng 4 bánh”; }} Dog::run();Person::run();Car::run();?>
Sự khác nhau giữa interface và abstract class
Tất cả phương thức trong interface luôn luôn(được hiểu) là abstract.Các phương thức trong abstract class là abstract hoặc không phải là abstract.Có thể implements nhiều interface nhưng không thể extends trực tiếp nhiều class.Các phương thức trong interface luôn luôn phải để là public, khác với abstract class có thể là public, private hoặc protected.
Sự giống nhau giữa interface và abstract class
Không thể tạo một biến kiểu interface hoặc abstract class.Nếu là phương thức abstract thì phải được khai báo lại trong class con.Cả interface và abstract class đều có tính kế thừa.
Xem thêm: hay Day Trên App Store, Tải Về Hay Day Apk Cho Android
Khi nào thì sử dụng interface, khi nào sử dụng abstract class
Khi một nhóm đối tượng có cùng bản chất kế thừa từ một class thì sử dụng abstract class.
Xem thêm: Tải Game Hoa Quả – Download Game Hoa Quả Nổi Giận
Khi một nhóm đối tượng không có cùng bản chất nhưng chúng có hành động giống nhau thì sử dụng interface.
Lời kết
Chuyên mục: Hỏi Đáp