使用不同包的同名类系统默认顺序:

这里将在com.testpackage包中尝试导入com.a.Testcom.B.Test,分析调用Test的具体包。
Test作为此次测试不同导入包的相同类名。

·将要导入的包程序

com.a包编写以下程序:

package com.a;
public class Test {public int num1=1;
}

com.b包编写以下程序:

package com.b;
public class Test {public int num2=2;
}

·com.text中情况分类

1.一般情况——使用声明更具体的包中的类

package com.testpackage;
import com.a.*;
import com.b.Test;
public static void main(String[] args){Test a=new Test();Test b=new Test();System.out.println(b.num2);//a和b两个对象只能调用com.b包中的属性System.out.println(a.num2);
}
/*
*此程序输出:
*2
*2
*/

a和b两个对象都调用的是com.b包中的Test方法,即采用完整具体类名声明包的类。

2.导入包声明程度一样具体——按顺序使用第一个

package com.testpackage;
import com.a.Test;
import com.b.Test;
public static void main(String[] args){Test a=new Test();Test b=new Test();System.out.println(b.num1);//a和b两个对象只能调用com.a包中的属性System.out.println(a.num1);
}
/*
*此程序输出:
*1
*1
*/

a和b两个对象都调用的是com.a包中的Test方法,即具体声明程度相同,使用排序第一导入包中的类。
此程序,系统还会提示:The import com.b.Test collides with another import.

3.不同导入包都采用通配符声明——必须进行选择才可正常

package com.testpackage;
import com.a.*;
import com.b.*;
public static void main(String[] args){Test a=new Test();
Test b=new Test();
}

系统报错:The type Test is ambiguous.
系统无法确定使用哪一个类,此时如果继续使用其中一个对象的属性,可选择num1或num2的属性,选定后系统自动增加具体声明语句,此时两个对象均使用这个具体声明包的方法。

比如选择a使用com.b.Test方法中num2属性:

package com.testpackage;
import com.a.*;
import com.b.*;
import com.b.Test;
public class TestPackage {public static void main(String[] args) {Test a=new Test();Test b=new Test();System.out.println(a.num2);//选择后即自动增加import com.b.Test;此时b对象只能选择com.b.Test方法System.out.println(b.num2); }
}
/*
*此程序输出:
*2
*2
*/

4.不同导入包都采用通配符声明,主程序内采用完整包名新建一个对象——必须选择且只能一个导入包使用

package com.testpackage;
import com.a.*;
import com.b.*;
public class TestPackage {public static void main(String[] args) {Test a=new Test();com.b.Test b=new Test();}
}

依旧提示:The type Test is ambiguous.
与上述情况3一样,需选择,此时必须都选择有完整类名的num2属性,即只能导入con.b.Test;否则com.b.Test b=new Test();将报错:Type mismatch: cannot convert from com.a.Test to com.b.Test.

package com.testpackage;
import com.a.*;
import com.b.*;
public class TestPackage {public static void main(String[] args) {Test a=new Test();com.b.Test b=new Test();System.out.println(a.num2);System.out.println(b.num2);}
}
/*
*此程序输出:
*2
*2
*/

4.第一个导入包声明具体,第二个导入包加通配符声明,主程序内完整包名导入——报错

package com.testpackage;
import com.a.Test;
import com.b.*;
public static void main(String[] args){Test a=new Test();
com.b.Test b=new Test();
//此句系统报错:Type mismatch: cannot convert from com.a.Test to com.b.Test
}

此种情况不存在。

5.两个具体声明的导入包,主程序内第二个包用完整类名新建对象——报错

package com.testpackage;
import com.a.Test;
import com.b.Test;
public class TestPackage {public static void main(String[] args) {Test a=new Test();com.b.Test b=new Test();
//此句系统报错:Type mismatch: cannot convert from com.a.Test to com.b.Test}
}

此种情况也不存在。

6.主程序用两个完整包名新建对象——报错

  • 不导入包
package com.testpackage;
public class TestPackage {public static void main(String[] args) {com.a.Test a=new Test();
//系统报错:Test cannot be resolved to a typecom.b.Test b=new Test();
//Multiple markers at this line
//  - Type mismatch: cannot convert from com.a.Test to com.b.Test}
}
  • 导入包含完整类名的包
package com.testpackage;
import com.a.Test;
import com.b.Test;
//系统报错:he import com.b.Test collides with another import statement
public class TestPackage {public static void main(String[] args) {com.a.Test a=new Test();com.b.Test b=new Test();
//系统报错:Type mismatch: cannot convert from com.a.Test to com.b.Test}
}
  • 导入包均包含通配符
package com.testpackage;
import com.a.*;
import com.b.*;
public class TestPackage {public static void main(String[] args) {com.a.Test a=new Test();
//系统报错:The type Test is ambiguouscom.b.Test b=new Test();
//系统报错:Multiple markers at this line
//  - The type Test is ambiguous
//  - Type mismatch: cannot convert from com.a.Test to }
}

小结

在com.testpackage中只能使用特定的一个导入包中的类名Test:只能使用com.a.Test或者只能使用com.b.Test。
一个类的方法中不可使用多个不同导入包中的相同类名。

JAVA导入不同包的同名类调用原则小结相关推荐

  1. (33)System Verilog模块与包定义同名类冲突

    (33)System Verilog模块与包定义同名类冲突 1.1 目录 1)目录 2)FPGA简介 3)System Verilog简介 4)System Verilog模块与包定义同名类冲突 5) ...

  2. JAVA导入Oracle包_将java的jar包导入oracle,通过oracle调用java方法

    最近项目上遇到一个问题,因为项目一些数据设计保密的问题,所以数据库的很多数据都是脱敏存储的;但是需求又需要去模糊查询,这就蛋疼了, 由于项目是用base64脱敏的;第一次想到了把条件进行脱敏之后去数据 ...

  3. java导入jar包源码_eclipse中导入jar包的源码

    在日常开发工作中,我们时常会需要查看下第三方jar包的源码来更加正确的理解该jar包或者框架提供的功能.下面是笔者知道的两种添加jar包源码的方式: 方式一:configure build path中 ...

  4. python怎么导入数据集keras_keras使用Sequence类调用大规模数据集进行训练的实现

    使用Keras如果要使用大规模数据集对网络进行训练,就没办法先加载进内存再从内存直接传到显存了,除了使用Sequence类以外,还可以使用迭代器去生成数据,但迭代器无法在fit_generation里 ...

  5. java 接口与包_java常用类包接口

    类 String Integer Long File Date Thread (java.lang.Thread Thread类的定义:public class Thread extends Obje ...

  6. java导入poi包_Java poi怎么导入

    展开全部 本篇面向32313133353236313431303231363533e59b9ee7ad9431333264643066对象为Java的初学者,从下载必备软件到创建一个空白的POI工程, ...

  7. java.util 常见_Java基础知识-java.util.concurrent包下常见类的使用

    一,Condition 一个场景,两个线程数数,同时启动两个线程,线程A数1.2.3,然后线程B数4.5.6,最后线程A数7.8.9,程序结束,这涉及到线程之间的通信. public classCon ...

  8. Java工具包工具类,java.util.concurrent 包下工具类的使用

    CountDownLacth 的使用 常用于监听某些初始化操作,等初始化执行完毕,通知主线程继续执行. 先看示例代码: public class UseCountDownLatch { public ...

  9. JAVA使用http包进行url接口调用以及返回值处理 HttpEntity ResponseEntity

    一个request包含 header和request body,我们用 HttpEntity<body,header>来构造一个请求 发出request之后会得到 response 用Re ...

  10. Java用数组的包文件_在Java中获取包内的类文件数组

    我能够使用普通的文件I / O和搜索机制来解决这个问题.您可以在此处查看答案. private static List getClassesForPackage(Package pkg) { Stri ...

最新文章

  1. 关于60枚一分两分五分硬币凑成一块钱的解决方法
  2. 面向方面编程(Spring AOP)
  3. [JZOJ5836] Sequence
  4. java高级----Thread之CyclicBarrier的使用
  5. Servlet和JSP之间的区别
  6. c++程序设计中文件输入输出流知识点
  7. 雅克德罗机器人_什么腕表配饰值得买 带货明星们都已经帮你选好了
  8. pytorch相关用法
  9. 通通玩blend美工(3)——可爱的云
  10. java实现归并排序(详解)
  11. 《跨界杂谈》(信息)安全
  12. nyoj-366 D的小L
  13. 企业破产重整网_企业破产重整的基本流程是怎样的?
  14. java自动违例设计,java违例
  15. 20_TodoList案例
  16. shell exec命令
  17. 超前进位加法器(附Verilog代码)
  18. AP-BSN: Self-Supervised Denoising for Real-World Imagesvia Asymmetric PD and Blind-Spot Network
  19. 【学习】深度学习代码各个步骤都是为了啥(三)
  20. 与另一台计算机建立ipc,怎样通过IPC连接到另一台计算机?

热门文章

  1. 8/人天,小记一次 JAVA(APP后台) 项目改造 .NET 过程(后台代码已开源于 Github)
  2. 哪个数据库替代oracle,关于Oracle数据库替代加密算法
  3. 信息检索关键词的进阶使用
  4. 幻云蜜网筑迷阵 春秋靶场信安大赛从攻击者角度看安全
  5. linux svn图形工具,linux 下svn图形客户端smartsvn 安装
  6. 用Excel自带图表插入带分类变量的箱形图(单坐标轴并列箱)
  7. 使用Python开发游戏运行脚本(一)成功调用大漠插件
  8. 基于眨眼状态的在线疲劳检测系统(Matlab-GUI设计)
  9. 公开课笔记 | 从0到1搭建数据运营体系
  10. oracle分区表备份恢复