问题描述
一般编写代码,需要用ArrayList对象时,都会像下面一样生成:List list = new ArrayList();这样写主要是符合了java面向对象的思想但有次编写代码时,需要使用到ArrayList的clone方法,而这个方法是在ArrayList中定义的,在List这个接口中并没有这时让我感到很困惑,本来这样生成ArrayList对象是很提倡的,可是却局限了ArrayList的使用方法不知道各位大神,是否能解开小弟困惑,又或者有其他方式使用实现类自己的方法
解决方案
java提倡面向接口编程 不面向实现编程这样可以充分利用java的多态特性 实现与具体对象的解耦 同时能够做到在运行时的时候才确定具体执行的操作。但是就像你所提到当前情况,没有什么东西是一成不变的,这才是写程序的乐趣,另外针对你刚说到的这个情况,你可以在程序中用强制类型转换去调用(ArrayList)list.clone()。
解决方案二:
clone()方法是Object类保护方法,所以你调不动的,要调用重新向下造型list到原本的实现类,然后调用即可,克隆接口就不知道怎么理解了
解决方案三:
看书,结果进去了,出不来了?
解决方案四:
这是官网上一段解释first, List is an interface, it does not extend Object which has the clone method internally second, list object does not have the method which exists in the List interface's implementation class ArrayList though.
解决方案五:
List 定义的接口, ArrayList 是具体实现类。 clone方式从Object对象集成。 List接口是不会定义clone方法。推荐看看Java编程思想,从目录你会找到你感兴趣的章节。