一道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.如果一个类没有修饰符,则只能被同一个包下的其他类使用.
------解决方案--------------------