这两个java文件为什么不能编译

[复制链接]
查看11 | 回复3 | 2010-7-2 10:40:50 | 显示全部楼层 |阅读模式
书上的例子,一个包里的三个文件:Protection.java,Derived.java和SamePackage.java。其中Protection.java编译成功,编译Derived.java时找不到继承的类Protection,SamePackage.java也是类似情况。
它们都在同一个目录p1里,怎么才能编译成功呢?
我是新手,望各位指教,谢谢。
三个程序代码如下:
package p1;
public class Protection {
int n = 1;
private int n_pri = 2;
protected int n_pro = 3;
public int n_pub = 4;

public Protection() {

System.out.println("base constructor");

System.out.println("n = " + n);

System.out.println("n_pri = " + n_pri);

System.out.println("n_pro = " + n_pro);

System.out.println("n_pub = " + n_pub);
}
}
=================================
package p1;
class Derived extends Protection {
Derived() {

System.out.println("derived constructor");

System.out.println("n = " + n);

//class only
//System.out.println("n_pri = " + n_pri);


System.out.println("n_pro = " + n_pro);

System.out.println("n_pub = " + n_pub);
}
}
=================================
package p1;
class SamePackage {
SamePackage() {

Protection p = new Protection();

System.out.println("same package constructor");

System.out.println("n = " + p.n);

//class only
//System.out.println("n_pri = " + p.n_pri);

System.out.println("n_pro = " + p.n_pro);

System.out.println("n_pub = " + p.n_pub);
}
}
试了下,两位说的都对。
快乐_无敌:这几个例子是显示访问修饰符所有组合的,如果去掉public就不符合原意了。

可为什么去掉public就能编译呢???
知道五周年:为什么统一编译能成功,分别编译就不行呢?不明白啊!

回复

使用道具 举报

千问 | 2010-7-2 10:40:50 | 显示全部楼层
将三个文件放到一个目录下,统一进行编译,命令: javac -d . *.java执行时需要连同包一起。例如:java p1.xxxx
回复

使用道具 举报

千问 | 2010-7-2 10:40:50 | 显示全部楼层
根本没那么复杂去他们上层目录javac ./p1/Derived.java直接搞定 上边那两位 再看看 javac 吧,都是用集成编译工具 惹得祸
回复

使用道具 举报

千问 | 2010-7-2 10:40:50 | 显示全部楼层
public Protection() 的 public 去掉
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行