![]() |
1
2
最好的方法是在Animal中定义抽象方法,并在子类中重写它。这就是多态性的工作原理。 不需要过载。
:
输出 :
____更新_1 我想补充一些意见,为什么重载这些方法不是一个好主意。
但它不会像你期望的那样工作。它会呼叫
对于循环的所有迭代,参数的编译时类型为
这可以通过以下方式解决:
此外,一个安全、保守的政策是永远不要出口两个过载
例如
|
![]() |
2
0
你需要在Animal中定义方法,并将其抽象化
|
![]() |
3
0
你可以这样做:
但是根据你在问题中描述的场景,@J-Alex answer是一个好方法。 |
![]() |
4
0
我可以告诉你“工厂设计模式”在这里是如何合适的。 定义主类如下:
相信我,如果你能分析一下这里的抽象层次,那就太棒了。 如果你使用更高级别的抽象,你甚至可以去掉这里的类型;你可以阅读《抽象工厂设计》。通过这种方式,您公开了最少的类特性(例如,在这里,您通过将它们直接用于主类中的new来公开Dog和Cat类)。如果你满意,请投赞成票。 |
![]() |
Eris · 纯虚拟成员有什么优势吗(除了他们可能防止的人为错误)? 3 年前 |
|
James Nguyen · Java多态性:为什么返回错误? 7 年前 |
|
Alex Cristea · 如何从另一个类的数组中打印特定行 7 年前 |
![]() |
juztcode · C语言中的静态和动态分辨率++ 7 年前 |
![]() |
Hugo · 具有多态关系的活动记录获取关联模型 7 年前 |
![]() |
pooya13 · 机器代码层上虚函数和条件执行的区别 7 年前 |
![]() |
Nisba · C中子类类型未知的模型类/子类++ 7 年前 |
![]() |
R zu · 使用多次调用的可替换方法初始化 7 年前 |