日期:2014-05-20  浏览次数:20708 次

一道java题,请高手指点
54、下面2个文件位于相同目录下,编译运行后会出现的情况是( )。 
//File P1.java
package MyPackage;
class P1{
void afancymethod(){
  System.out.println("What a fancy method");
  }
}
//File P2.java
public class P2 extends P1{
  public static void main(String argv[]){
P2 p2 = new P2();
p2.afancymethod();
  }
}
A、2个文件都可以编译,P2运行输出“What a fancy method”
B、2个文件都不能编译 
C、2个文件都可以编译,P2运行时报错误 
D、P1编译成功,P2编译时报错误 


为什么答案会选D呢?我运行的结果是选A,答案是不是错了

------解决方案--------------------
答案是对的,你编译执行有问题吧
因为两个类在不同的package里(P1是 MyPackage 的,P2是没有package)的
不同package的类缺省是不可见的,P2必须import进来才行
------解决方案--------------------
在同一个目录下,说明就在同一个package里面
P1有这句package MyPackage;,P2也应该有,没有就会编译错误
------解决方案--------------------
两点:
1.同一个目录下不一定就在同一个包里,包的决定因素是 package 关键字决定的,而不是靠文件目录来决定的

2.如果一个类没有修饰符,则只能被同一个包下的其他类使用.
------解决方案--------------------
探讨

两点:
1.同一个目录下不一定就在同一个包里,包的决定因素是 package 关键字决定的,而不是靠文件目录来决定的

2.如果一个类没有修饰符,则只能被同一个包下的其他类使用.