2014-07-26 55 views
0

我有一个目录,E:\test\access ... 在E:\test我创建了一个包含文件:如何在包执行Java程序

package test; 
public class Coffee 
{ 
    protected void service(){ 
     System.out.println("i am service in coffee"); 
    } 
    public static void main(String[] args){ 
    } 
} 
class Cafe 
{ 
    public static void main(String[] args){ 
     Coffee c=new Coffee(); 
     c.service(); 
    } 
} 

我执行以下命令:

E:\test> javac Coffee.java      
E:\test> java test.Cafe 

,它的工作。接下来,我走进了E:\test\access目录并创建以下文件,Coffee1.java

package access; 
import test.Coffee; 
public class Coffee1 extends Coffee 
{ 
    public static void main(String[] args){ 
     Coffee c=new Coffee(); 
     c.service(); 
     Coffee1 c1=new Coffee1(); 
     c1.service(); 
    } 
} 

我进口,扩大咖啡,对不对?那么为什么我不能创建该类的对象?
后来我评论的东西,并试图编译和执行程序

2:我跑

E:\test\access> javac Coffee1.java 

,它编译。

如果我运行此:

E:\test\access> java access.Coffee1 

它给了我一个错误说无法找到的主要方法。

测试文件夹中的Coffee.java也一样。为什么它不在这里工作?

我无法弄清楚这个软件包是如何工作的以及受保护的东西如何适用于其他软件包中的子类。请详细解释。

回答

0

Java期望您的目录结构来镜像你的包装结构。如果您Coffee1类是在test\access,应当在包装test.access,你应该从根(E:\在这种情况下)执行javacjava,这样的事情:

E:\> javac test\access\Coffee1.java