题目:(大意)如果import的类库中有两个名字一样的类,我们如果使用了这个名字的类,会发生冲突,描述情形。
解析:这个问题在不同的场景下会有不同的表现。
demo:假的ArrayList
package iteye; public class ArrayList { public ArrayList() { System.out.println("i'm a fake ArrayList!"); } }
测试类:
package iteye; import java.util.*; import iteye.*; public class test { public static void main(String []args) { ArrayList list =new ArrayList(); } }
情况一:同包
如果重名的类中有一个位于同一包中,且另一个是*引用,则不会报错,且会使用同一包中的类。
情况二:不同包且都是*引用
如果重名的类都和使用的类在不同包中,如假冒的ArrayList在包iteye.bean中,那么编译不会通过,需要删除一个import或者带上包名使用。
情况三:不同包且一个是*引用一个是绝对引用
如这里改为:
import java.util.*; import iteye.bean.ArrayList;
会使用绝对引用的类。
情况四:不同包且均为绝对引用
冲突的后一个import会报
The import iteye.bean.ArrayList collides with another import statement
结论:我们看到有四种可能的情况,如果重名的话可能会有不可预知的后果,我们往往不知道使用了哪一个类,最好不要重名。有可能重名的时候用包名。