Abstract class trong Java giống với interface trừ một điểm nó chứa các phương thức mặc định đầy đủ. Abstract class có thể chứa các phương thức mà chưa được thực thi và cũng có thể chứa các phương thức đầy đủ.
Từ khoá abstract thường được sử dụng để tạo một abstract class hoặc phương thức. Abstract class trong Java không thể khởi tạo. Abstract class chủ yếu được sử dụng để cung cấp một cơ sở cho các subclass mở rộng bằng cách sử dụng extend, thực thi các phương thức abstract, ghi đè (override), hoặc sử dụng các phương thức hoàn chỉnh trong abstract class.
Sau đây là một ví dụ về Abstract class trong Java
package com.example.design; //abstract class public abstract class Person { private String name; private String gender; public Person(String nm, String gen){ this.name = nm; this.gender = gen; } //abstract method public abstract void work(); @Override public String toString(){ return "Name=" + this.name + "::Gender=" + this.gender; } public void changeName(String newName) { this.name = newName; } }
Chú ý rằng phương thức work()
là một phương thức abstract và không có body. Tiếp theo bên dưới là một class sẽ extend từ abstract class trên
package com.example.design; public class Employee extends Person { private int empId; public Employee(String nm, String gen, int id) { super(nm, gen); this.empId = id; } @Override public void work() { if(empId == 0){ System.out.println("Not working"); } else { System.out.println("Working as employee!!"); } } public static void main(String args[]){ //coding in terms of abstract classes Person student = new Employee("Dove","Female",0); Person employee = new Employee("Pankaj","Male",123); student.work(); employee.work(); //using method implemented in abstract class - inheritance employee.changeName("Pankaj Kumar"); System.out.println(employee.toString()); } }
Subclass Employee
kế thừa các thuộc tính và phương thức của superclass Person
sử dụng kế thừa trong Java
Sau đây là một số điểm quan trọng về abstract class trong Java
- Từ khoá abstract được sử dụng để tạo abstract class trong Java
- Abstract class trong Java không thể khởi tạo
- Chúng ta có thể sử dụng từ khoá abstract để tạo một phương thức abstract, một phương thức abstract sẽ không có body
- Nếu một class có các phương thức abstract thì class cũng nên là abstract bằng cách sử dụng từ khoá abstract, nếu không thì nó sẽ bị lỗi khi biên dịch
- Không cần thiết phải có phương thức abstract trong abstract class. Chúng ta có thể đánh dấu một class là abstract thậm chí nó không có bất kỳ phương thức abstract nào
- Nếu một abstract class không có bất kỳ một phương thức đầy đủ nào (được implement), thì nên sử dụng interface bởi vì Java không hỗ trợ kế thừa nhiều class.
- Tất cả các phương thức trong interface là abstract ngầm trừ khi phương thức trong interface là static hoặc mặc định. Các phương thức mặc định hoặc static trong interface được thêm vào từ Java 8
- Abstract class trong Java có thể implements các interface mà không cần cung cấp thực thi của các phương thức interface.
- Abstract class được sử dụng để cung cấp các thực thi phương thức dùng chung cho tất cả các subclass hoặc để cung cấp thực thi mặc định.
- Chúng ta có thể chạy abstract class giống như các class khác nếu nó có phương thức
main()