JAVA导入不同包的同名类调用原则小结
使用不同包的同名类系统默认顺序:
这里将在com.testpackage包中尝试导入com.a.Test和com.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导入不同包的同名类调用原则小结相关推荐
- (33)System Verilog模块与包定义同名类冲突
(33)System Verilog模块与包定义同名类冲突 1.1 目录 1)目录 2)FPGA简介 3)System Verilog简介 4)System Verilog模块与包定义同名类冲突 5) ...
- JAVA导入Oracle包_将java的jar包导入oracle,通过oracle调用java方法
最近项目上遇到一个问题,因为项目一些数据设计保密的问题,所以数据库的很多数据都是脱敏存储的;但是需求又需要去模糊查询,这就蛋疼了, 由于项目是用base64脱敏的;第一次想到了把条件进行脱敏之后去数据 ...
- java导入jar包源码_eclipse中导入jar包的源码
在日常开发工作中,我们时常会需要查看下第三方jar包的源码来更加正确的理解该jar包或者框架提供的功能.下面是笔者知道的两种添加jar包源码的方式: 方式一:configure build path中 ...
- python怎么导入数据集keras_keras使用Sequence类调用大规模数据集进行训练的实现
使用Keras如果要使用大规模数据集对网络进行训练,就没办法先加载进内存再从内存直接传到显存了,除了使用Sequence类以外,还可以使用迭代器去生成数据,但迭代器无法在fit_generation里 ...
- java 接口与包_java常用类包接口
类 String Integer Long File Date Thread (java.lang.Thread Thread类的定义:public class Thread extends Obje ...
- java导入poi包_Java poi怎么导入
展开全部 本篇面向32313133353236313431303231363533e59b9ee7ad9431333264643066对象为Java的初学者,从下载必备软件到创建一个空白的POI工程, ...
- java.util 常见_Java基础知识-java.util.concurrent包下常见类的使用
一,Condition 一个场景,两个线程数数,同时启动两个线程,线程A数1.2.3,然后线程B数4.5.6,最后线程A数7.8.9,程序结束,这涉及到线程之间的通信. public classCon ...
- Java工具包工具类,java.util.concurrent 包下工具类的使用
CountDownLacth 的使用 常用于监听某些初始化操作,等初始化执行完毕,通知主线程继续执行. 先看示例代码: public class UseCountDownLatch { public ...
- JAVA使用http包进行url接口调用以及返回值处理 HttpEntity ResponseEntity
一个request包含 header和request body,我们用 HttpEntity<body,header>来构造一个请求 发出request之后会得到 response 用Re ...
- Java用数组的包文件_在Java中获取包内的类文件数组
我能够使用普通的文件I / O和搜索机制来解决这个问题.您可以在此处查看答案. private static List getClassesForPackage(Package pkg) { Stri ...
最新文章
- 关于60枚一分两分五分硬币凑成一块钱的解决方法
- 面向方面编程(Spring AOP)
- [JZOJ5836] Sequence
- java高级----Thread之CyclicBarrier的使用
- Servlet和JSP之间的区别
- c++程序设计中文件输入输出流知识点
- 雅克德罗机器人_什么腕表配饰值得买 带货明星们都已经帮你选好了
- pytorch相关用法
- 通通玩blend美工(3)——可爱的云
- java实现归并排序(详解)
- 《跨界杂谈》(信息)安全
- nyoj-366 D的小L
- 企业破产重整网_企业破产重整的基本流程是怎样的?
- java自动违例设计,java违例
- 20_TodoList案例
- shell exec命令
- 超前进位加法器(附Verilog代码)
- AP-BSN: Self-Supervised Denoising for Real-World Imagesvia Asymmetric PD and Blind-Spot Network
- 【学习】深度学习代码各个步骤都是为了啥(三)
- 与另一台计算机建立ipc,怎样通过IPC连接到另一台计算机?
热门文章
- 8/人天,小记一次 JAVA(APP后台) 项目改造 .NET 过程(后台代码已开源于 Github)
- 哪个数据库替代oracle,关于Oracle数据库替代加密算法
- 信息检索关键词的进阶使用
- 幻云蜜网筑迷阵 春秋靶场信安大赛从攻击者角度看安全
- linux svn图形工具,linux 下svn图形客户端smartsvn 安装
- 用Excel自带图表插入带分类变量的箱形图(单坐标轴并列箱)
- 使用Python开发游戏运行脚本(一)成功调用大漠插件
- 基于眨眼状态的在线疲劳检测系统(Matlab-GUI设计)
- 公开课笔记 | 从0到1搭建数据运营体系
- oracle分区表备份恢复