Lia*_*ang 0 java oop interface
因此在java中,初始化接口(如集合或列表)的方法是创建实现它的类的实例,例如:
Collection<Object> moo = new ArrayList();
Run Code Online (Sandbox Code Playgroud)
如果我想在稍后的代码中指定一个实现,我想通过创建另一个类来实现这一点:
class ListList extends ArrayList{
}
Run Code Online (Sandbox Code Playgroud)
然后使用.初始化变量
Collection<Object> moo = new ListList();
Run Code Online (Sandbox Code Playgroud)
然后,如果我想稍后更改实现,那么所需要的就是更改ListList扩展的内容.
所以,这里有一个问题......是否有更好的方法(我还是觉得我对这类事情缺乏经验).
有没有更好的方法来做到这一点
是的:使用工厂方法:
public static Collection<Object> createCollection() {
return new ArrayList<Object>(); // change this later, if need be
}
Run Code Online (Sandbox Code Playgroud)
然后,调用工厂而不是实例化:
Collection<Object> moo = createCollection();
Run Code Online (Sandbox Code Playgroud)
你使用"虚拟"子类的建议可能看起来很有吸引力,但这种继承的滥用总会导致后来的痛苦和痛苦.你真的不想那样做.