Có, chúng ta có thể định nghĩa constructor có tham số (parameterized constructor) trong một abstract class.
Điều kiện để định nghĩa constructor có tham số trong abstract class
- Lớp con (subclass) kế thừa abstract class phải có constructor và constructor đó phải gọi constructor có tham số của lớp cha.
- Gọi constructor cha bằng từ khóa super() trong constructor của lớp con.
- Nếu không đặt lời gọi super() trong constructor lớp con, sẽ xảy ra lỗi compile-time.
Ví dụ minh họa
abstract class AbstractClassTest {
AbstractClassTest(int a) { // Parameterized Constructor
System.out.println("Parameterized Constructor of an abstract class a=" + a);
}
}
public class Test extends AbstractClassTest {
Test() {
super(20); // Bắt buộc phải gọi super(20)
System.out.println("Test Class Constructor");
}
public static void main(String[] args) {
Test obj = new Test();
}
}
Trong ví dụ trên, chúng ta bắt buộc phải đặt lời gọi super() trong constructor của lớp con (Test), nếu không sẽ báo lỗi compile-time.
Kết quả đầu ra
Parameterized Constructor of an abstract class a=20 Test Class Constructor
Lý do: Abstract class không thể khởi tạo trực tiếp, nhưng constructor của nó chạy khi khởi tạo đối tượng của lớp con. Constructor có tham số cho phép truyền dữ liệu khởi tạo từ lớp con lên lớp cha abstract.