Tình hình là tôi muốn kế thừa một đối tượng để có một giao diện constructor sạch:Thừa hưởng một lớp học với đối số nhà xây dựng trong java
class BaseClass {
public BaseClass(SomeObject object){
...
}
}
class SubClass extends BaseClass{
private SubObject subObject = new SubObject();
public SubClass(){
super(new SomeObject(subObject)); // doesn't compile
}
}
Tuy nhiên, để làm được điều đó tôi cần phải làm những thứ trước khi các nhà xây dựng như trong ví dụ ở trên nhưng không thể vì Java không cho phép điều đó. Có cách nào để khắc phục điều này? Tôi bắt đầu cảm thấy rằng nếu lớp của bạn được thiết kế để được phân lớp, nó luôn luôn triển khai hàm tạo mặc định và cung cấp các giá trị cho các giá trị cần thiết ... Đôi khi bạn có thể loại bỏ điều này nếu bạn tạo một đối tượng mới thẳng vào siêu constructor như một đối số nhưng nếu bạn cần một tham chiếu đến đối tượng mà bạn đã tạo thì bạn sẽ được ẩn.
Lỗi biên dịch bạn nhận được là gì? –
không thể tham chiếu subObject trước khi supertype constructor được gọi là – palto
* Không thể tham chiếu đến trường con subObject trong khi gọi một constructor rõ ràng * –