java的包Package中同名类的冲突及其理解
来源:互联网 发布:如何查看淘宝降权 编辑:程序博客网 时间:2024/06/18 12:32
在一个项目中建立三个包分别为:
chapter2
pack2
pack3
其中初始化(主)函数在InitialTelphone类里,看图显然是在chapter2包里。
这是chapter2包下的Telphone类实现
这是pack2包下的Telphone类实现
package chapter2;public class Telphone { //属性 private float cup; private float screen; private float mem; //get set方法 public float getScreen() { return screen; } public void setScreen(float newScreen) { screen=newScreen; } //方法 public Telphone() { System.out.println("第一个包的Telphone类"); } }
package pack2;public class Telphone { public Telphone() {// TODO Auto-generated constructor stub System.out.println("第二个包的类Telphone");}}
这是pack3包下的Telphone类实现
package pack3;public class Telphone { public Telphone() {// TODO Auto-generated constructor stub System.out.println("第三个包的Telphone类");}}
chapter2包下的initialTelphone类实现:
package chapter2;public class InitalTelphone {public static void main(String[] args) {//通过无参方法生成对象 Telphone tel=new Telphone();}}
在initialTelphone文件写没有导入包pack2.Telphone和pack3.Telphone
执行程序将会得到以下结果:
第一个包的Telphone类
若在initialTelphone文件中导入pack2.telphone
intialTelphone代码改变如下:
package chapter2;import pack2.Telphone;public class InitalTelphone {public static void main(String[] args) {//通过无参方法生成对象 Telphone tel=new Telphone(); }}执行程序会发现结果为:
第二个包的类Telphone
但是如果导入的包形式为:impor pack2.*;
但是如果导入的包形式为:impor pack2.*;
package chapter2;import pack2.*;public class InitalTelphone {public static void main(String[] args) {//通过无参方法生成对象 Telphone tel=new Telphone(); }}程序运行结果又发生了变化:
第一个包的Telphone类
如果同时导入pack2.Telphone和pack3.Telphone
如果同时导入pack2.Telphone和pack3.Telphone
则会发生包冲突报错
The import pack3.Telphone collides with another import statement
package chapter2;import pack2.Telphone;import pack3.Telphone;;public class InitalTelphone {public static void main(String[] args) {//通过无参方法生成对象 Telphone tel=new Telphone(); }}
但是把pack2.telphone格式改为pack2.*,pack3.Telphone保持不变
package chapter2;import pack2.*;import pack3.Telphone;;public class InitalTelphone {public static void main(String[] args) {//通过无参方法生成对象 Telphone tel=new Telphone(); //有参构造方法生成对象 //Telphone tel2=new Telphone(4.0f,3.0f,1.5f);}}程序执行结果为:
第三个包的Telphone类
显然如果把pack3.Telphone格式也改为pack3.*,结果可想而知:
第一个包的Telphone类
但是如果把chapter2中的Telphone类给删除了
导入包的格式为pack2.*;pack3.*;
运行程序就会出现冲突错误:
The type Telphone is ambiguous
The type Telphone is ambiguous
The type Telphone is ambiguous
如果只导入Pack2.*或者只导入Pack3.*则又可以运行成功:
(import Pack2.*;)结果:第二个包的Telphone类
(import Pack3.*;)结果:第三个包的Telphone类
通过上述程序的测试,我知道了包重名类的简单运行机制:
1 如果没有导入任何包,主函数运行时创建类的实例首先从自己所在的包里面找
2 如果导入一个包,并且导入该包的形式精确到重名的类,则主函数创建重名类实例将会从导入的包里找
3 如果导入一个包,包的格式为 import 包名.*;类型的,则主函数创建重名类实例时首先在主函数自己所在的包里找,找不到了再去导入的.*包里面找
4 如果导入多个包,并且导入的多个包中只有一个导入类型精确到重名类,则主函数创建重名类实例时在导入精确到类的包里面找。
5 如果导入多个包,并且读入的多个包中都是(import 包名.*;)类型的,主函数创建重名类实例时直接在自己所在包里找;如果找不到,并且导入的多个包里有两个同名类就会报错 ;
阅读全文
2 0
- java的包Package中同名类的冲突及其理解
- java中package(包)的使用理解
- java中常用的包package
- 对java中package的理解
- java中package和import的理解
- JSP页面出现同名类包import冲突的解决办法 collides with another import statement
- package java,与java标准的类库冲突
- Java的类(class)、包(package)和接口(interface) 的理解
- JAVA中其它包中无法引用缺省包(default package)的类 - 使用反射可以
- jsp-api.jar文件 与tomcat中同名包冲突出现 java.lang.NullPointerException
- java 包 package 的控制
- java的包(Package)
- java的包(package)
- Java类加载机制——如何实现一个工程中不同模块加载不同版本的同名jar包。
- Java类加载机制——如何实现一个工程中不同模块加载不同版本的同名jar包。
- JAVA中包(package)的使用相关
- Java中禁止的包名(Prohibited package name)
- Java中禁止的包名(Prohibited package name)
- nginx基础配置篇
- C面向对象-构建对象
- JS-1-解析与执行
- Codevs 1021 玛丽卡
- arp脚本
- java的包Package中同名类的冲突及其理解
- ARM驱动之流水灯
- windows系统numpy的下载与安装教程
- 深入正则表达式应用
- 华为机试:简单密码破解、字符串通配符
- 【Linux】正则表达式
- Windows下安装python和pip
- C语言结构体与位段
- C语言基础笔记