2012-03-20 23 views
7

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

+0

Có lẽ thêm một số mã và mẫu đầu ra? – smessing

+0

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

Trả lời

8

getClass().getSuperclass() nên làm.

+0

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ó –

+0

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

+0

Khuyến nghị của tôi là tránh phản xạ hoàn toàn nếu có thể. –

4

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.

+0

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, –

+4

@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

0

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(); 
+2

'This.' là không cần thiết. –

Các vấn đề liên quan