类重名的问题(java编程思想第5章)

kayej 2006-03-05 05:17:50
我在看类重名
有个问题:
代码:(我先放入两个文件中)
Vector.java

class Vector {
public Vector() {
System.out.println("Class Vector");
}

}

Exercise3.java

import 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;
就会报错。

谁能解释一下,还有就是在遇到重名的时候要注意什么
...全文
395 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
humanity 2006-03-05
  • 打赏
  • 举报
回复
这也能让我们看出:
当我们把一个类定义在一个单独的源文件中和附加在另外一个源文件中,这两种方式还是略有差别的,这个差别就只有后面这种含有这个附加的 包内访问级别的 源文件中的类能感觉到。

这很微妙,

我想到了一个 以前的 Eclipse 的小缺陷:
Eclipse 目前还不能探测出后面这种 包含 包内访问级别 的类的源文件在什么地方, 比如当我们在 Eclipse 的 Console View 看到了异常的时候我们用鼠标点击带有下划线的一行的时候 Eclipse 不能找到源文件在什么地方,比如 我们自己写的这个 Vector 抛出异常而这个Vector 不再单独的源文件中。
humanity 2006-03-05
  • 打赏
  • 举报
回复
因为你自己写的 Vector 和 Exercise3 在同一个包内,所以不需要导入。
前面分开的时候能判断(你明确的导入了 java.util.Vector). 明确导入的优先级更高。

后面的合并的文件中
如果 import java.util.*; 他使用的是什么?
他用的是你自己写的那个,因为 .* 是个“随需导入”, 他的优先级最低,说得越明确越没有歧义的那种导入方式优先级就越高。

当你使用 import java.util.Vector 时, 使用了明确的导入,那么他和你自己写的 Vector 就是优先级相等了, 编译器无法判断该用哪个。

xiangzhengyan 2006-03-05
  • 打赏
  • 举报
回复
完整路径
包最大的好处就是便于管理 防止重名
kayej 2006-03-05
  • 打赏
  • 举报
回复
为什么上面重名了,没有提示呢?
sportboys 2006-03-05
  • 打赏
  • 举报
回复
yes, give the full package name will be fine
superman421 2006-03-05
  • 打赏
  • 举报
回复
写完整的类名就可以了。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧