Tôi có một số mã Java đơn giản mà trông tương tự như sau trong cấu trúc của nó:lỗi Java: Implicit siêu constructor là undefined cho constructor mặc định
abstract public class BaseClass {
String someString;
public BaseClass(String someString) {
this.someString = someString;
}
abstract public String getName();
}
public class ACSubClass extends BaseClass {
public ASubClass(String someString) {
super(someString);
}
public String getName() {
return "name value for ASubClass";
}
}
tôi sẽ có một vài lớp con của BaseClass
, mỗi thực hiện getName()
phương pháp theo cách riêng của mình (template method pattern).
Điều này hoạt động tốt, nhưng tôi không thích có hàm tạo dự phòng trong các lớp con. Đó là nhiều hơn để loại và rất khó để duy trì. Nếu tôi đã thay đổi chữ ký phương thức của hàm tạo BaseClass
, tôi sẽ phải thay đổi tất cả các lớp con.
Khi tôi loại bỏ các nhà xây dựng từ các lớp con, tôi có được điều này lỗi thời gian biên dịch:
Implicit super constructor BaseClass() is undefined for default constructor. Must define an explicit constructor
phải là những gì tôi đang cố gắng để làm tốt?
Vui lòng để nguyên hàm tạo 'dư thừa'! Nó duy trì khả năng đọc mã của bạn và tất cả các IDE hiện đại có thể tự động tạo ra nó, vì vậy bạn chỉ cần nhấn phím tắt. –
Đọc lại câu hỏi của riêng tôi một năm sau đó và nó xảy ra với tôi rằng tôi có thể loại bỏ các nhà xây dựng (bao gồm trong lớp cơ sở) như matt b gợi ý, và sau đó sử dụng một phương pháp nhà máy tĩnh để xây dựng trường hợp. – Joel