导入一个包中的全部文件时应该怎么处理! 为什么我的程序运行不了呢

来源:7-2 使用包管理 Java 中的类

敲代码的小聪

2015-08-12 16:56

导入一个包中的全部文件时应该怎么处理! 为什么我的程序运行不了呢

55cb0a3e00010d9605000356.jpg

55cb0a4000018c0105000356.jpg

55cb0a400001869705000356.jpg

写回答 关注

4回答

  • 丶小八戒
    2015-08-12 17:14:18
    已采纳

    你本身包下就有个同名的Telphone类,有歧义,所以程序不知道是实例化哪个。

    你要实例化HelloTelphone2包下的Telphone的话,直接指定全路径。

    Telphone test = new  com.HelloTelphone2.Telphone();

    永远的蓝天

    怎么这样也不对呢? TelePhone phone2 = new imooc.second.TelePhone(); phone2.getPhone(); 提示说“Type mismatch:can not convert from TelePhoneto TelePhone”

    2015-09-12 20:17:30

    共 1 条回复 >

  • GNEZ
    2015-10-02 17:42:35

    我之前没有导入整个包,只导入了Telephone文件,没有问题。

    然后我尝试了你的方法,结果也不行,但是并没有报错,只是调用的是本包的类而不是导入的包的类

    参考了《Java编程语言》(第三版)Arnold,Gosling,Holmes 著 第264页到265页的内容

    improt attr*;

    使用*号导入语句叫做“按需导入”(import on demand)声明。也可以采用单一类型导入(single type import):

    import attr.Attrinbuted;

    ……

    import 机制是一种被动机制,因为关于有名包的信息和类型信息并不是在编译时被读入加载的——直到包中的某个类型被使用时才读入这些信息,import语句只是简单的告诉编译器,当他在本地找不到定义的类型时,它应该如何确定类型的完全限定名。……编译器会按下面的顺序查找该类型:

    1. 包括子类型的当前类型

    2. 当前类型中的嵌套类型

    3. 显式命名的导入类型(单类型导入)。

    4. 在同一个包内声明的其他类型。

    5. 隐式命名的导入类型(按需导入)。


      我前后用的两种方法的优先顺序分别是3和5,而在同一个包中还声明了Telephone,它在4。所以,当单类型导入的时候可以而按需导入的时候不行。我想这应该是为什么出错的原因

  • 永远的蓝天
    2015-09-12 20:20:33
    package imooc;
    //import imooc.second.TelePhone;
    import imooc.second.*;
    
    public class mainPhone {
    	public static void main(String[] args){
    		//TelePhone phone1 = new TelePhone();
    		TelePhone phone1 = new imooc.TelePhone();
    		phone1.getPhone();
    		
    		TelePhone phone2 = new imooc.second.TelePhone();
    		phone2.getPhone();
    		
    		SmartPhone sPhone = new SmartPhone();
    		sPhone.getSmartPhone();
    	}
    }
    package imooc.second;
    
    public class TelePhone {
    	public void getPhone(){
    		System.out.println("imooc.second.telephone running !");
    	}
    }
    package imooc;
    
    public class TelePhone {
    	public void getPhone(){
    		System.out.println("imooc.Telephone running !");
    	}
    	
    }


  • 敲代码的小聪
    2015-08-12 16:59:15

    导入import com.HelloTelphone2.*;包中的全部文件了,然后Telphone test=new Telphone();不就应该是导入的包的Telphone()了嘛?为什么不对呢!

    桑桑2333

    或者是在import com.HelloTelphone2.Telphone;这样就可以直接实例化对象了

    2015-09-07 10:26:09

    共 1 条回复 >

Java入门第二季 升级版

课程升级!以终为始告别枯燥,在开发和重构中体会Java面向对象编程的奥妙

531187 学习 · 6326 问题

查看课程

相似问题