|
阅读:663回复:11
[求助]一个关于包的编绎问题。请教kwang老师:-)
在昨天晚上做程序时,出现了这样的一个问题:以下四个类放在一个文件中进行编译正常,可是单把各个类分别存为JAVA文件,再进行编译就会出现错误,请问是什么原因?多谢!!
package p1; class Protection{//当作为单独文件时前面加public 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); } } 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); } } 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 class Demo{ public static void main(String args[]){ Protection ob1=new Protection(); Derived ob2=new Derived(); SamePackage ob3=new SamePackage(); } } 分成单独文件时对Protection编译通过;但对后几个进行编译时出错: 如对Derived.java编译时出现: Derived.java:14:cannot resolve symbol symbol:class Protection location:calss p1.Derived class Derived extends Protection{ ^ Derived.java:7:cannot resolve symbol symbol:variable n location:calss p1.Derived System.out.println("n="+n); ^ ......... 4 errors 注:已放入p1目录 -------------------- 计算机=生命 我 = 她 [ 2004-06-18 15:01:51 lijiannan_1981 修改 ] |
|
|
|
1C#
发布于:2004-06-18 03:17
Re:[求助]一个关于包的编绎问题。请教kwang老师:-)
你把单个文件的代码贴出来看看。
我看到哪个变量n的问题,如果你在一个类中定义一个变量时没有没有申明public\protected\static\final等默认的属性是当前类可以访问,不能从别的包访问。 太晚了,想睡了,明天再来看看。 其实只要了解了public\protected……的具体含义以及包之间类、域、方法访问权限的关系,写这种程序应该不是问题吧。 zzz - - - -------------------- 好好吃饭,天天睡觉 努力赚钱,娶个老婆 |
|
|
|
2C#
发布于:2004-06-18 09:12
Re:[求助]一个关于包的编绎问题。请教kwang老师:-)
你把单个文件的代码贴出来看看。 按照你的方法做了 还是不成功 怎么办啊??? |
|
|
|
3C#
发布于:2004-06-18 13:22
Re:[求助]一个关于包的编绎问题。请教kwang老师:-)
代码是没有问题的,分成不同的文件也没有问题。
编译问题。 去掉package pl; 看。 不去package pl ,是不是编译时候加什么选项的? |
|
|
|
4C#
发布于:2004-06-18 15:01
Re:[求助]一个关于包的编绎问题。请教kwang老师:-)
代码是没有问题的,分成不同的文件也没有问题。 经刚才再次调试 仍然不成功 |
|
|
|
5C#
发布于:2004-06-18 18:56
Re:[求助]一个关于包的编绎问题。请教kwang老师:-)
JAVA偶不懂,帮你顶一下,HOHO
--------------------
嘿嘿 |
|
|
|
6C#
发布于:2004-06-18 21:22
Re:[求助]一个关于包的编绎问题。请教kwang老师:-)
问题都不写清楚些:(
你拆成怎样了? 我是这样的: Demo.java ======== public class Demo{ public static void main(String args[]){ Protection ob1=new Protection(); Derived ob2=new Derived(); SamePackage ob3=new SamePackage(); } } ======== Derived.java ======== 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); } } 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); } } =========== Protection.java =========== class Protection{//当作为单独文件时前面加public 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); } } =========== javac Demo.java java Demo =========== ---------- java ---------- base constructor n=1 n_pri=2 n_pro=3 n_pub=4 base constructor n=1 n_pri=2 n_pro=3 n_pub=4 derived constructor n=1 n_pro=3 n_pub=4 base constructor n=1 n_pri=2 n_pro=3 n_pub=4 same package constructor n=1 n_pro=3 n_pub=4 Normal Termination Output completed (0 sec consumed). |
|
|
|
7C#
发布于:2004-06-18 21:32
Re:[求助]一个关于包的编绎问题。请教kwang老师:-)
代碼寫得不整齊,還有package p1
用數字可能不規範。 packagename/Demo.java 中加上package packagename; 在Eclipse 下沒問題。 但我用命令行編譯也出現問題。JAVA不太熟:))我覺得是定義package 時 編譯方法有特別的規則。查書上的例子就可以解決。 |
|
|
|
8C#
发布于:2004-06-18 21:33
Re:[求助]一个关于包的编绎问题。请教kwang老师:-)
還有就是,越來越覺得Python 比較適合初學者了:)) |
|
|
|
9C#
发布于:2004-06-18 22:14
Re:[求助]一个关于包的编绎问题。请教kwang老师:-)
[em142]還有就是,越來越覺得Python 比較適合初學者了:))-------------------- 计算机=生命 我 = 她 |
|
|
|
10C#
发布于:2004-06-18 22:17
Re:[求助]一个关于包的编绎问题。请教kwang老师:-)
谢谢mumu师哥了
问题已经得到了解决 你给我的提议是对的 还有就是如果多个类写在一个文件中,则不管成员的访问描述符如何,这些类的实例都可以 对这些成员进行访问. 同在一个package中的类,不在一个文件中则可以访问不加修饰符 (默认为proctected),proctected, public的成员,但是不能访问private成员。 -------------------- 计算机=生命 我 = 她 |
|
|
|
11C#
发布于:2004-06-19 15:51
Re:[求助]一个关于包的编绎问题。请教kwang老师:-)
回家看了thinking in java 里面package 的一章。
原来编译时要确定CLASSPATH ,这个是package 麻烦的地方,前面的编译错误是因为这个问题。 所以你去掉package 就没有CLASSPATH 的问题。 |
|
|