我在一个子类里面,当我试图找到超类的名字时,我尝试了super.getClass(),但它返回了我的名字仅子类。 为什么?为什么在子类中的super.getClass()返回子类名称
回答
getClass().getSuperclass()
应该做的。
http://stackoverflow.com/questions/3294656/how-to-get-the-parent-base-class-object-super-getclass这个线程由你提出的坏设计,所以你会如何建议避免它 – 2012-03-20 16:00:09
这取决于场景。我不知道你打算如何使用它 – Bozho 2012-03-20 17:23:15
我的建议是尽可能地避免反思。 – 2012-03-20 17:27:45
如果您从超类(或超类的超类等)中覆盖方法,则super.theMethod()
将调用原始方法,而不是您用它覆盖的方法。如果您没有实际覆盖theMethod
,super.theMethod()
的行为完全像theMethod()
。
在这种情况下,我认为你没有覆盖getClass()
(其实我知道你不是因为它是最后的),所以酷似getClass()
super.getClass()
行为,即无论哪种方式Object
类的getClass
方法被调用。
是的,我同意,但为什么这样的设计,如果超级被称为调用方法,为什么它没有调用超类方法, – 2012-03-20 16:02:23
@AbhishekChoudhary是的。当你调用'getClass'时,你调用'Object'中定义的方法'getClass'。 'Object'是你的类的超类(即使不是直接的超类),所以你调用超类的方法版本。事实上,超类的版本是该方法的唯一版本。 – sepp2k 2012-03-20 16:04:19
这是因为你正在创建派生类的对象,而不是超类..你可以试试这个
this.getClass().getSuperClass();
'this.'是不必要的。 – 2012-03-20 16:17:13
- 1. 为什么在父方法中返回子类名称?
- 2. 返回子类的子类
- 3. 返回子类
- 4. 为什么getClass返回类+ $ 1(或$ *)的名称
- 5. 为什么在子类
- 6. 为什么document.getElementsByClassName(“类名”)返回对象
- 7. 返回子类为基类对象
- 8. 子类和返回类型
- 9. 父类要返回子类
- 10. 为什么QObject :: findChildren返回具有公共基类的子代?
- 11. 覆盖子类中的返回类型
- 12. 从子类中删除类名称
- 13. 为什么与该类名称相同的方法不需要返回类型?
- 14. 为什么staticMetaObject.className()返回父类的类名?
- 15. 我可以在返回子类类型
- 16. 返回DataContract的子类
- 17. 为什么要返回令牌名称?
- 18. Rails:使用类方法返回有关子类的属性时,为什么不会加载子类?
- 19. 为什么ATL调用子类“超类”
- 20. 只返回联合子类中的某些子类
- 21. 从子类返回容器的类型
- 22. 在NSWindowController子类中,[self document]返回null
- 23. 从父类获取子类名称
- 24. 为什么不能在子类中看到父类的方法?
- 25. 为什么父类的静态方法隐藏在子类中?
- 26. 什么是子类
- 27. 返回模板子类
- 28. C++:返回子类指针
- 29. 在Ruby on Rails中,在基类控制器类中获取子类名称的好方法是什么?
- 30. 返回给定子类的实例的方法的通用签名是什么?
也许添加一些代码和样本输出? – smessing 2012-03-20 15:53:19
可能重复[如何获得父级基类对象super.getClass()](http://stackoverflow.com/questions/3294656/how-to-get-the-parent-base-class-object-super- getclass) – assylias 2012-03-20 15:57:56