gpt4 book ai didi

Java参数多态示例

转载 作者:行者123 更新时间:2023-12-01 08:15:51 25 4
gpt4 key购买 nike

我有一个关于参数多态性的问题。如果我有一个混合了子类型的集合,如何确定实际类型并避免强制转换。例如

    class Animal{

}

class Bird extends Animal{
void fly(){}
}

class Dog extends Animal{
void bark(){}
}

ArrayList<Animal> list = new ArrayList<Animal>();

问题是当我迭代 Animal 集合时,我如何知道哪个是哪个。我每次都需要使用instanceof来检查实际类型吗?

    for(Animal animal : list){
if(animal instanceof Dog){
((Dog) animal).bark();
}
else ((Bird) animal).fly();
}

最佳答案

如果您需要执行此操作,则意味着这是一个常见操作。你通常会有这样的:

abstract class Animal {
abstract void act();
}

class Bird extends Animal{
void fly(){}
void act(){
fly();
}
}

class Dog extends Animal{
void bark(){}
void act(){
bark();
}
}

在循环中,您只需调用 act 方法:

for(Animal animal : list){
animal.act();
}

关于Java参数多态示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13404865/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com