Trong C++, bạn có thể sử dụng một danh sách khởi tạo để khởi tạo các trường của lớp trước khi hàm khởi tạo bắt đầu chạy. Ví dụ:Tại sao Java không có danh sách khởi tạo như trong C++?
Foo::Foo(string s, double d, int n) : name(s), weight(d), age(n) {
// Empty; already handled!
}
Tôi tò mò tại sao Java không có tính năng tương tự. Theo Lõi Java: Tập 1:
C++ sử dụng cú pháp đặc biệt này để gọi hàm tạo trường. Trong Java, không cần thiết vì các đối tượng không có các đối tượng con, chỉ các con trỏ đến các đối tượng khác.
Dưới đây là câu hỏi của tôi: "vì đối tượng không có subobjects"
gì họ có ý nghĩa bởi Tôi không hiểu subobject là gì (tôi đã thử tìm kiếm nó); họ có nghĩa là một instantiation của một subclass mà mở rộng một superclass? Vì lý do tại sao Java không có danh sách khởi tạo như C++, tôi cho rằng lý do là vì tất cả các trường đã được khởi tạo mặc định trong Java và cũng vì Java sử dụng từ khóa
super
để gọi siêu (hoặc cơ sở trong C++ lingo) -class constructor. Điều này có đúng không?
Câu trả lời hay. Tôi đã rất ngạc nhiên khi trả lời câu hỏi của mình. Tôi sẽ upvote bạn sau khi tôi đăng ký. Ngoài ra, một liên kết về sự thay đổi trong C++ 0x sẽ được đánh giá cao. –
@ Jesse- Rất vui được giúp đỡ! Đừng quên chấp nhận câu trả lời là tốt nếu bạn nghĩ nó trả lời câu hỏi. :-) Và tôi đã bao gồm một liên kết cho sự thay đổi C++ 0x trong câu hỏi. – templatetypedef
19 phiếu trong một chút trong một giờ trong đêm ... tốt đẹp :-) –