Hãy xem xét các trường hợp sau đây:Tạo dụ từ dụ lớp cha
class A {
int x;
int y;
}
class B extends A {
int z;
}
Bây giờ, ở đâu đó trong các mã lớp học này được sử dụng như thế này:
A objA = getAFromSomewhere();
B objB = null;
Và trong một tình huống nhất định tôi muốn làm một cái gì đó giống như
objB = objA; // can't do this
objB.z = someZ;
Tất nhiên các đối tượng thực sự phức tạp hơn một chút, vì vậy không chỉ sao chép hai i nts. Nhưng chúng cũng không quá phức tạp.
Tôi biết tôi có thể viết một constructor cho B như thế này:
public B(A anA) {
this.a = anA.a;
this.b = anA.b;
this.z = 0;
}
Nhưng nếu đó thực sự là cách duy nhất, tôi thích hợp nhất bổ sung thành viên B vào A.
cập nhật xem xét câu trả lời
Câu hỏi của tôi chưa đủ rõ ràng. Tôi hiểu rằng objB = objA; không thể làm việc (vì vậy tôi đã yêu cầu "một cái gì đó như", có nghĩa là một cái gì đó với sự phức tạp mã tương đương) và tôi biết về các vấn đề với các bản sao nông sâu.
Điều tôi đang tìm kiếm là khả năng sao chép các thành viên của một lớp cơ sở (giả sử sử dụng clone()). Bạn có thể hiểu rằng việc sao chép mọi thành viên theo cách thủ công là một giải pháp tồi vì nó làm tăng thêm độ phức tạp và sự dư thừa cho mã. Cảm ơn bạn đã trả lời!
Tôi đã sửa đổi câu hỏi của mình để tính đến điều này. Có vẻ như thực sự không có giải pháp thanh lịch –
@ didi_X8: Thật vậy - nhưng điều quan trọng là bạn hiểu * tại sao * không có giải pháp tổng quát thanh lịch. Ví dụ, nó sẽ có nghĩa là gì nếu tôi có thể viết: 'Object x =" Hello "; FileOutputStream stream = x; '? –
"Bạn có thể chỉ muốn tạo một hàm tạo trong B, lấy A và sao chép tất cả dữ liệu A vào B. mới" Vâng, đó là chính xác những gì tôi muốn. Nhưng không nhắc đến mọi thành viên của A một cách riêng biệt. –