Tôi ở trong một lớp con và khi tôi cố gắng tìm tên của lớp siêu, tôi đã thử super.getClass(), nhưng nó trả về tên của chỉ lớp con. Tại sao?lý do tại sao super.getClass() trong một phân lớp trả về tên lớp con
Trả lời
getClass().getSuperclass()
nên làm.
http://stackoverflow.com/questions/3294656/how-to-get-the-parent-base-class-object-super-getclass chủ đề này bởi bạn đề xuất về thiết kế xấu, vì vậy những gì sẽ là đề xuất của bạn để tránh nó –
Nó phụ thuộc vào kịch bản. Tôi không biết những gì bạn định sử dụng nó cho – Bozho
Khuyến nghị của tôi là tránh phản xạ hoàn toàn nếu có thể. –
Nếu bạn ghi đè lên một phương thức từ siêu lớp của bạn (hoặc siêu lớp của siêu lớp của bạn, v.v.), super.theMethod()
sẽ gọi phương thức ban đầu thay vì phương thức bạn đã sử dụng phương pháp gốc. Nếu bạn không ghi đè thực tế theMethod
, super.theMethod()
sẽ hoạt động chính xác như theMethod()
.
Trong trường hợp này tôi giả sử bạn không ghi đè getClass()
(trong thực tế tôi biết bạn đã làm không phải vì nó là cuối cùng), vì vậy super.getClass()
hành vi giống hệt như getClass()
, ví dụ: một trong hai cách phương pháp getClass
của lớp Object
được gọi.
vâng, tôi đồng ý, nhưng tại sao thiết kế như vậy, nếu siêu đang được đề cập để gọi phương thức, tại sao nó không gọi phương thức siêu lớp, –
@AbhishekChoudhary Đó là. Khi bạn gọi 'getClass', bạn đang gọi phương thức' getClass' được định nghĩa trong 'Object'. 'Object' là một lớp cha của lớp của bạn (ngay cả khi không phải là siêu lớp trực tiếp), vì vậy bạn đang gọi phiên bản của lớp cha của phương thức. Trong thực tế, phiên bản của lớp cha là phiên bản duy nhất của phương thức đó. – sepp2k
này là bởi vì bạn đang tạo ra đối tượng của lớp được thừa kế và không siêu lớp .. bạn có thể thử này
this.getClass().getSuperClass();
'This.' là không cần thiết. –
- 1. Tại sao getClass trả về tên của lớp + $ 1 (hoặc $ *)
- 2. lý do tại sao một số mp3 trên ứng dụng trả về mime_content_type/octet-stream
- 3. Tại sao một lớp con @property không có ivar tương ứng ẩn các siêu phân lớp?
- 4. Tại sao is_a? trả về false cho lớp Hash?
- 5. Tại sao không Type.GetFields() trả về các trường sao lưu trong một lớp cơ sở?
- 6. Tại sao bạn nên ngăn lớp học bị phân lớp?
- 7. Về sizeof của một hàm thành viên lớp con trỏ
- 8. Nhận tên lớp con?
- 9. iPhone: Ghi đè nút UIButtonWithType để trả về lớp con
- 10. Java: trả về phân lớp trong chữ ký của phương thức siêu lớp
- 11. Chức năng trả về tên lớp trong D
- 12. Chú giải Java trả về các tên lớp bí mật
- 13. lý do tại sao lớp 'đối tượng' không có thuộc tính người dùng đặt
- 14. lý do tại sao memcached?
- 15. lý do tại sao có thể kiểm tra nếu (document.addEventListener) trả về false
- 16. lý do tại sao math.Ceiling (double a) không trả về int trực tiếp?
- 17. đặt lớp hiện tại làm chú thích kiểu trả về
- 18. FacesContext.getCurrentInstance() trả về null trong lớp Runnable
- 19. Tại sao không thể lưu trữ một con trỏ hàm của một lớp cơ sở?
- 20. 'NSInternalInconsistencyException', lý do: "Foo" không phải là một lớp con của NSManagedObject
- 21. Lý do đằng sau cách đặt tên lớp Qt là gì?
- 22. JPA lý do tại sao sử dụng createNamedQuery
- 23. Phân lớp một lớp riêng tư (hỗ trợ) trong AVM2
- 24. Mocking một phương thức trả về một lớp niêm phong trong RhinoMocks
- 25. Tại sao tên của lớp chứa không được nhận dạng là chú thích hàm trả về giá trị?
- 26. Trả về một con trỏ
- 27. Tại sao g ++ lưu trữ tên lớp trong nhị phân đã biên dịch?
- 28. Tại sao GetHashCode nằm trong lớp Object?
- 29. Tại sao malloc luôn trả về NULL
- 30. Lấy tên của một phân lớp từ trong một siêu lớp
Có lẽ thêm một số mã và mẫu đầu ra? – smessing
có thể trùng lặp của [Làm thế nào để có được đối tượng lớp cơ sở cha mẹ super.getClass()] (http://stackoverflow.com/questions/3294656/how-to-get-the-parent-base-class-object-super- getclass) – assylias