比方说,我有有一些methodes A级。然后我有一个扩展A的类B,但有一个额外的变量。现在我想在另一个类中有一个A和B的ArrayList,所以当我遍历该列表时,即使用一个.getName()
方法,我就可以得到两个类的名称?我是否创建ArrayList<A>
并向其添加A和B的实例,或者创建ArrayList<Object>
?在ArrayList<Objects>
的情况下,如何在不同的对象上调用.getName()
?ArrayList中含有继承类
回答
您可以创建与设置为A,B类型参数ArrayList中继承了A的所有属性和方法,这意味着你可以访问它们的B中完全相同的方式,你在A.访问它们然而,如果你的想要访问B中不存在的属性,您必须投射它。例如,
for (A p: aList) {
p.methodFromA();
if (p instanceof B) {
B q = (B) p;
q.methodOnlyBHas();
// or
((B)p).methodOnlyBHas();
}
}
如果创建了一个ArrayList对象,则必须将每个元素都转换为所需的类。这几乎否定了泛型背后的想法,并且与创建没有类型参数的ArrayList没有什么不同。你应该避免这样做,这样你就可以获得仿制药给你的好处,例如在编译时输入错误,而不是在运行时抛出异常。
但是如果我想打印出这个对象,也就是说A有一个叫做'name,size,color'的som变量和B有相同的结果,但是也有'weight'这个变量,我怎样才能得到所有的变量A和全部来自B?像: '对于(A号码:ALIST){ 打印(P) }',但我还希望打印类型B的对象在'的ArrayList '?如果它是有道理的.. – Lasse
我已经更新了答案,以便我可以添加代码示例,希望可以帮助 – ewanc
太棒了!谢谢! :) – Lasse
ArrayList<A>
会为A和B,没有必要去更多的泛化,即目标工作。
如何调用getName()
取决于其中getName()
定义。 如果是在A
,你可以把它在ArrayList
所有对象,但如果方法只在B
,您可能需要检查instanceof B
,然后调用方法。
- 1. 其他继承类中的继承类
- 2. 继承不含?
- 3. 类可以从“参数”类继承吗? (有条件继承)
- 4. 包含宝石的Ruby类继承
- 5. 有麻烦继承基类
- 6. 反序列化继承的ArrayList到继承名单<>
- 7. “继承不,包含”或“继承,不包含”
- 8. 角色到继承的类从ArrayList的基类的
- 9. 集类继承
- 10. 子类继承
- 11. SpriteKit - 类继承
- 12. 继承类
- 13. jquery类继承
- 14. Python类继承
- 15. 继承PHP类
- 16. 类继承
- 17. 继承基类
- 18. 类继承C++
- 19. Java类继承
- 20. Javascript类继承
- 21. CoffeeScript类继承
- 22. 类继承
- 23. es6类继承
- 24. 类继承自
- 25. C#类继承
- 26. 类继承
- 27. 继承类
- 28. JavaScript类继承
- 29. 多类继承?
- 30. 继承Array类
如果我正确理解你的意图,你应该可以使用'ArrayList ',因为B是A的子类。如果两个类都有'getName()'方法(B将继承A的方法,但你也可以选择覆盖它),你只需要一个循环遍历你的'ArrayList'并为'ArrayList'中的每个对象调用'getName()'方法。 –