Vta*_*hip 1 java oop polymorphism
我知道多态性规则,我们可以通过像这样的代码参数发送它
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);
}
}
Run Code Online (Sandbox Code Playgroud)
但
List<Example> examples = new ArrayList<Example>();
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,我不明白为什么必须使用List<Example>
.
为什么我们不能这样使用?
ArrayList<Example> examples = new ArrayList<Example>();
Run Code Online (Sandbox Code Playgroud)
因为在使用的List<Example>
时候不能使用只在ArrayList
类中存在的方法trimToSize()
我怎么知道何时使用或不使用?
使用List而不是ArrayList的原因是,当您想要使用List的功能而不关心它的实现时,那么只需使用基本接口或抽象类就可以提供更大的灵活性.
如果您需要ArrayList的特殊功能,那么您可以指定它,但如果将来您决定将实现更改为ArrayList以外的其他内容,则很难进行更改(因为您必须在任何地方更改代码) ,而不仅仅是底层代码).