Java中如何导入与当前类同名的外部类?
在Java中导入并使用与当前类同名的外部类
刚好碰到过类似的场景,这种情况Java语法是允许的,但有个核心优先级规则得注意:当导入的类和当前类同名时,当前类的名称会直接覆盖导入的类。也就是说,你在com.version2.Sample里直接写Sample,编译器默认会解析成当前包下的com.version2.Sample,而非你导入的com.version1.Sample。
那怎么调用到导入的那个同名类呢?其实很简单,直接用它的全限定类名(包名+类名)来明确指定就行。我给你写个完整的示例:
首先是com.version1.Sample的代码:
package com.version1; public class Sample { public void printInfo() { System.out.println("我是来自com.version1包的Sample类"); } }
然后是com.version2.Sample的代码,这里导入了同名类,但调用外部类时需要用全限定名:
package com.version2; import com.version1.Sample; // 导入同名类,但当前类优先级更高 public class Sample { public void printInfo() { System.out.println("我是来自com.version2包的Sample类"); } public static void main(String[] args) { // 直接写Sample,默认指向当前类 Sample currentSample = new Sample(); currentSample.printInfo(); // 输出:我是来自com.version2包的Sample类 // 要调用导入的外部类,必须用全限定类名 com.version1.Sample externalSample = new com.version1.Sample(); externalSample.printInfo(); // 输出:我是来自com.version1包的Sample类 // 如果是Java 10及以上版本,还能用var简化变量声明 var anotherExternalSample = new com.version1.Sample(); anotherExternalSample.printInfo(); } }
最后提个小建议:虽然语法上支持这种写法,但实际项目里尽量避免出现同名类的情况——毕竟会增加代码的理解成本,团队协作时很容易搞混。如果有条件,给其中一个类重命名或者调整包结构会更友好。
内容的提问来源于stack exchange,提问作者Devvie
相关产品推荐
相关产品推荐

