gpt4 book ai didi

java - 我对多态感到困惑

转载 作者:行者123 更新时间:2023-11-29 09:57:42 25 4
gpt4 key购买 nike

我知道多态性规则,我们可以像这段代码一样通过参数发送它

interface Animal {
void whoAmI();
}

class A implements Animal{

@Override
public void whoAmI() {
// TODO Auto-generated method stub
System.out.println("A");
}

}

class B implements Animal{

@Override
public void whoAmI() {
// TODO Auto-generated method stub
System.out.println("B");
}

}

class RuntimePolymorphismDemo {

public void WhoRU(List t){
System.out.println(t.getClass());
}

public static void main(String[] args) {
A a = new A();
B b = new B();

RuntimePolymorphismDemo rp = new RuntimePolymorphismDemo();
rp.WhoRU(a);
rp.WhoRU(b);
}
}

但是

 List<Example> examples = new ArrayList<Example>();

在上面的代码中,我不明白为什么一定要用List<Example> .

为什么我们不能这样使用?

ArrayList<Example> examples = new ArrayList<Example>();

因为当我们使用 List<Example>我们不能使用只存在于 ArrayList 中的方法类 trimToSize()

我如何知道何时使用或不使用?

最佳答案

使用 List 而不是 ArrayList 的原因是,当你想使用 List 的特性而不关心它的实现时,那么只使用基接口(interface)或抽象类会给你更多的灵 active 。

如果您需要 ArrayList 的特殊功能,那么您可以指定它,但如果将来您决定将实现更改为 ArrayList 以外的其他东西,则很难更改(因为您必须到处更改代码它被引用,而不仅仅是底层代码)。

关于java - 我对多态感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4907417/

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