關(guān)于java的包Package中同名類的沖突及其理解
java的包Package中同名類的沖突及理解
在一個(gè)項(xiàng)目中建立三個(gè)包分別為
chapter2
pack2
pack3
其中初始化(主)函數(shù)在InitialTelphone類里,看圖顯然是在chapter2包里。
這是chapter2包下的Telphone類實(shí)現(xiàn)
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("第一個(gè)包的Telphone類"); } }
這是pack2包下的Telphone類實(shí)現(xiàn)
package pack2; public class Telphone { public Telphone() { // TODO Auto-generated constructor stub System.out.println("第二個(gè)包的類Telphone"); } }
這是pack3包下的Telphone類實(shí)現(xiàn)
package pack3; public class Telphone { public Telphone() { // TODO Auto-generated constructor stub System.out.println("第三個(gè)包的Telphone類"); } }
chapter2包下的initialTelphone類實(shí)現(xiàn)
package chapter2; public class InitalTelphone { public static void main(String[] args) { //通過(guò)無(wú)參方法生成對(duì)象 Telphone tel=new Telphone(); } }
在initialTelphone文件寫沒(méi)有導(dǎo)入包pack2.Telphone和pack3.Telphone
執(zhí)行程序?qū)?huì)得到以下結(jié)果:
第一個(gè)包的Telphone類
若在initialTelphone文件中導(dǎo)入pack2.telphone
intialTelphone代碼改變?nèi)缦拢?/p>
package chapter2; import pack2.Telphone; public class InitalTelphone { public static void main(String[] args) { //通過(guò)無(wú)參方法生成對(duì)象 Telphone tel=new Telphone(); } }
執(zhí)行程序會(huì)發(fā)現(xiàn)結(jié)果為:
第二個(gè)包的類Telphone
但是如果導(dǎo)入的包形式為:impor pack2.*;
package chapter2; import pack2.*; public class InitalTelphone { public static void main(String[] args) { //通過(guò)無(wú)參方法生成對(duì)象 Telphone tel=new Telphone(); } }
程序運(yùn)行結(jié)果又發(fā)生了變化:
第一個(gè)包的Telphone類
如果同時(shí)導(dǎo)入pack2.Telphone和pack3.Telphone
則會(huì)發(fā)生包沖突報(bào)錯(cuò)
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) { //通過(guò)無(wú)參方法生成對(duì)象 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) { //通過(guò)無(wú)參方法生成對(duì)象 Telphone tel=new Telphone(); //有參構(gòu)造方法生成對(duì)象 //Telphone tel2=new Telphone(4.0f,3.0f,1.5f); } }
程序執(zhí)行結(jié)果為:
第三個(gè)包的Telphone類
顯然如果把pack3.Telphone格式也改為pack3.*,結(jié)果可想而知:
第一個(gè)包的Telphone類
但是如果把chapter2中的Telphone類給刪除了
導(dǎo)入包的格式為pack2.*;pack3.*;
運(yùn)行程序就會(huì)出現(xiàn)沖突錯(cuò)誤:
The type Telphone is ambiguousThe type Telphone is ambiguous
如果只導(dǎo)入Pack2.*或者只導(dǎo)入Pack3.*則又可以運(yùn)行成功:
(import Pack2.*;)結(jié)果:第二個(gè)包的Telphone類
(import Pack3.*;)結(jié)果:第三個(gè)包的Telphone類
通過(guò)上述程序的測(cè)試,
我知道了包重名類的簡(jiǎn)單運(yùn)行機(jī)制:
1、如果沒(méi)有導(dǎo)入任何包,主函數(shù)運(yùn)行時(shí)創(chuàng)建類的實(shí)例首先從自己所在的包里面找
2、如果導(dǎo)入一個(gè)包,并且導(dǎo)入該包的形式精確到重名的類,則主函數(shù)創(chuàng)建重名類實(shí)例將會(huì)從導(dǎo)入的包里找
3、如果導(dǎo)入一個(gè)包,包的格式為 import 包名.*;類型的,則主函數(shù)創(chuàng)建重名類實(shí)例時(shí)首先在主函數(shù)自己所在的包里找,找不到了再去導(dǎo)入的.*包里面找
4、如果導(dǎo)入多個(gè)包,并且導(dǎo)入的多個(gè)包中只有一個(gè)導(dǎo)入類型精確到重名類,則主函數(shù)創(chuàng)建重名類實(shí)例時(shí)在導(dǎo)入精確到類的包里面找。
5、如果導(dǎo)入多個(gè)包,并且讀入的多個(gè)包中都是(import 包名.*;)類型的,主函數(shù)創(chuàng)建重名類實(shí)例時(shí)直接在自己所在包里找;如果找不到,并且導(dǎo)入的多個(gè)包里有兩個(gè)同名類就會(huì)報(bào)錯(cuò) ;
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
從搭建Struts2 開(kāi)發(fā)環(huán)境說(shuō)起
本篇文章,小編為大家介紹從搭建Struts2 開(kāi)發(fā)環(huán)境說(shuō)起,有需要的朋友可以參考一下2013-04-04SpringBoot如何返回Json數(shù)據(jù)格式
這篇文章主要介紹了SpringBoot如何返回Json數(shù)據(jù)格式問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03淺析Spring的事務(wù)實(shí)現(xiàn)原理
這篇文章主要為大家詳細(xì)介紹了Spring中事務(wù)實(shí)現(xiàn)的原理,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Spring有一定的幫助,需要的可以參考一下2022-11-11Java面試題沖刺第三十天--數(shù)據(jù)庫(kù)(6)
這篇文章主要為大家分享了最有價(jià)值的三道關(guān)于數(shù)據(jù)庫(kù)的面試題,涵蓋內(nèi)容全面,包括數(shù)據(jù)結(jié)構(gòu)和算法相關(guān)的題目、經(jīng)典面試編程題等,感興趣的小伙伴們可以參考一下2021-09-09Mybatis-plus 雙主鍵的實(shí)現(xiàn)示例
本文主要介紹了Mybatis-plus 雙主鍵的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-05-05解決JDBC連接Mysql長(zhǎng)時(shí)間無(wú)動(dòng)作連接失效的問(wèn)題
這篇文章主要介紹了解決JDBC連接Mysql長(zhǎng)時(shí)間無(wú)動(dòng)作連接失效的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-03-03