public class Base {
//long list of attributes
// no Constructor using fields
// no init methode
// i cannot change this class
}
bây giờ tôi mở rộng Base Class như:java, khởi tạo lớp con từ SuperClass
public class subClass extends Base{
private boolean selected;
...
getter und setter
...
}
tôi trở thành một danh sách các đối tượng cơ sở List<Base>
nhưng tôi cần phải cùng một danh sách nhưng như List<SubClass>
là có cách nào để khởi tạo lớp con từ lớp cơ sở?
dụ:
for(Base b: list){
SubClass sub = (SubClass)b; // Thats wrong i know
if(...){
sub.setSelected(true);
}
newList.add(sub);
}
tôi cố gắng để tránh những init thủ công của mỗi thuộc tính của cơ sở Class
đến lớp con
tôi cập nhật Câu hỏi của tôi như yêu cầu trong trường Nhận xét: thiết kế ở trên chỉ là một ví dụ. QUESTIN CHÍNH XÁC CỦA TÔI LÀ:
tại sao chuyển đổi BaseClass thành SubClass (sence Subclass extends BaseClass
) là không thể? tại sao Java Dosn't cho phép tôi làm như sau:
dụ:
Class Base{
private String name;
.....
}
Class SubClass extends Base{
private String title;
}
sau đó
Base b = DBController.getById(...);
SubClass sub = (SubClass)b;
sau đó các đối tượng sub
nên có tên thuộc tính từ các đối tượng b
và title
Thuộc tính là null
tại sao đây không phải là trường hợp trong java?
xin lỗi vì tiếng anh xấu, nhờ tôi
Khởi tạo lớp con từ lớp cha - tại sao? Điều này nghe có vẻ không tốt và nguy hiểm nhất. –
Trường 'Liệt kê ' được xác định ở đâu? Trong chính lớp 'Base'? Bạn có quyền kiểm soát nơi nó được khai báo và cách khởi tạo của nó không? –
Perception
Tôi đánh giá cao đề nghị bạn nhìn vào "thích Thành phần hơn thừa kế" - google nó. Bạn sẽ tìm thấy một số cuộc thảo luận thú vị về vấn đề này. Tôi chỉ nói điều này bởi vì có vẻ như bạn đang cố gắng tuyệt vọng để lạm dụng đặc quyền đó. –