Why default constructor is required(explicitly) in a parent class if it
has an argumented constructor
Không nhất thiết!
Bây giờ trong lớp B của bạn
class B extends A {
}
bạn chưa cung cấp bất kỳ constructor trong lớp B do đó, một constructor mặc định sẽ được đặt. Bây giờ nó là một quy tắc mà mỗi nhà xây dựng phải gọi một trong số đó là hàm tạo siêu lớp.Trong trường hợp của bạn, hàm tạo mặc định trong lớp B sẽ cố gắng gọi hàm khởi tạo mặc định trong lớp A (đó là cha mẹ) nhưng vì bạn không có hàm tạo mặc định trong lớp A (như bạn đã cung cấp một hàm dựng với đối số trong lớp A một cách rõ ràng) không có hàm tạo mặc định trong lớp A), bạn sẽ gặp lỗi.
Những gì bạn có thể có thể làm là
Dù không cung cấp args constructor trong lớp A.
A()
{
//no arg default constructor in Class A
}
HOẶC
Rõ ràng viết không args constructor trong B và gọi siêu của bạn với một số đối số int mặc định.
B()
{
super(defaultIntValue);
}
Điểm mấu chốt là cho một đối tượng được tạo ra hoàn toàn xây dựng của mỗi phụ huynh trong hệ thống phân cấp thừa kế phải được gọi. Mà những người gọi thực sự là sự lựa chọn thiết kế của bạn. Nhưng trong trường hợp bạn không cung cấp một cách rõ ràng bất kỳ java nào sẽ đặt hàm tạo mặc định super() gọi là dòng thứ nhất của mỗi hàm tạo lớp con của bạn và bây giờ nếu bạn không có trong lớp bậc trên thì bạn sẽ gặp lỗi.
Nguồn
2013-09-12 14:14:10
@ user358099: Để làm cho nó rõ ràng rằng nó đã cố gắng gọi các siêu cấu trúc không có tham số. –