我对多态性感到困惑

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()

我怎么知道何时使用或不使用?

Cod*_*nci 7

使用List而不是ArrayList的原因是,当您想要使用List的功能而不关心它的实现时,那么只需使用基本接口或抽象类就可以提供更大的灵活性.

如果您需要ArrayList的特殊功能,那么您可以指定它,但如果将来您决定将实现更改为ArrayList以外的其他内容,则很难进行更改(因为您必须在任何地方更改代码) ,而不仅仅是底层代码).