我在看类重名
有个问题:
代码:(我先放入两个文件中)
Vector.javaclass Vector {
public Vector() {
System.out.println("Class Vector");
}}Exercise3.javaimport java.util.Vector;public class Exercise3 {
public static void main(String[] args) {
Vector v = new Vector();
}
}这个时候应该来说java.util.Vector和自己定义的Vector重名了,但是jb编辑器没有提示,而Eclipse只有个warning的提示(The local variable v is never read)上说要提示错误信息亚
还有就是这个时候v 定义的是:java.util.Vector
如果我改成:import java.util.*;而是v定义了自己定义的Vector;如果我放到一个文件里
Exercise3.java
import java.util.*;class Vector {
  Vector() {
    System.out.println("Class Vector");
  }
}public class Exercise3 {
  public static void main(String[] args) {
    Vector v = new Vector();
  }
}
这个样子和上面是一样的情况
而我改成import java.util.Vector;
就会报错。谁能解释一下,还有就是在遇到重名的时候要注意什么

解决方案 »

  1.   

    yes, give the full package name will be fine
      

  2.   

    因为你自己写的 Vector 和 Exercise3 在同一个包内,所以不需要导入。
    前面分开的时候能判断(你明确的导入了 java.util.Vector). 明确导入的优先级更高。后面的合并的文件中 
    如果 import java.util.*; 他使用的是什么?
    他用的是你自己写的那个,因为 .* 是个“随需导入”, 他的优先级最低,说得越明确越没有歧义的那种导入方式优先级就越高。当你使用 import java.util.Vector 时, 使用了明确的导入,那么他和你自己写的 Vector 就是优先级相等了, 编译器无法判断该用哪个。
      

  3.   

    这也能让我们看出:
    当我们把一个类定义在一个单独的源文件中和附加在另外一个源文件中,这两种方式还是略有差别的,这个差别就只有后面这种含有这个附加的 包内访问级别的 源文件中的类能感觉到。这很微妙,我想到了一个 以前的 Eclipse 的小缺陷:
    Eclipse 目前还不能探测出后面这种 包含  包内访问级别 的类的源文件在什么地方, 比如当我们在 Eclipse 的 Console View 看到了异常的时候我们用鼠标点击带有下划线的一行的时候 Eclipse 不能找到源文件在什么地方,比如 我们自己写的这个 Vector 抛出异常而这个Vector 不再单独的源文件中。