标题:[求助]一个有关包的问题
只看楼主
★王者至尊★
Rank: 1
等 级:新手上路
帖 子:528
专家分:0
注 册:2006-3-28
 问题点数:0 回复次数:6 
[求助]一个有关包的问题

定义包中的一个类
--------------------
//SomeSuper.java
package PKG1;
public class SomeSuper
{
protected int prot;
}
--------------------
下面是另一个类 由SomeSuper派生得到
---------------------------------------------------------
//PotectedTest.java
import PKG1.*;
class SomeSub extends SomeSuper{
void ok(){
prot=0;
System.out.println(prot);
}
void alsoOK(SomeSub subReference){
subReference.prot=0;
System.out.println(prot);
}
void notOk(SomeSuper superReference){
superReference.prot=0;
System.out.println(prot);
}
}
public class ProtectedTest{
public static void main(String[] args){
ss=new SomeSub();
ss.ok();
ss.alsoOk();
ss.notOk();
}
}
两个源文件在同一个目录H:\javastudy\Myjavas 下面 classpath=H:\javastudy\Myjavas;
编译出现一下错误
H:\javastudy\Myjavas\ProtectedTest.java:2: cannot access SomeSuper
bad class file: H:\javastudy\Myjavas\SomeSuper.java
file does not contain class SomeSuper
Please remove or make sure it appears in the correct subdirectory of the classpath.
class SomeSub extends SomeSuper{
^
1 error

Process completed.
甚是迷惑 ,不知道是什么原因,我感觉没有错误啊
那位高手指点!
感激不尽!


搜索更多相关主题的帖子: SomeSuper java prot void SomeSub 
2006-04-10 14:53
千里冰封
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:灌水之王
等 级:版主
威 望:155
帖 子:28477
专家分:59
注 册:2006-2-26
得分:0 

你把你的SomeSuper.java也放在PKG1包里面就可以了


可惜不是你,陪我到最后
2006-04-10 15:06
★王者至尊★
Rank: 1
等 级:新手上路
帖 子:528
专家分:0
注 册:2006-3-28
得分:0 

PKG1中要SomeSuper.class不就够了吗?为什么还要.java源文件?
还是迷糊...
我改成这样了,但是编译器告诉我 PKG1中的protected 变量不能用,说明前面那个帖子你给我说错了,不同包即使是子类也不能用其超类来引用超类中的protected的变量,不知道我总结的对不?请冰封指点!
----------------------------
//SomeSuper.java
package PKG1;
public class SomeSuper{
protected int prot;

}
--------------------------------------------
ProtectedTest.java
import PKG1.*;
class SomeSub extends SomeSuper{
void ok(){
prot=0;
System.out.println(prot);
}
void alsoOk(SomeSub subReference){
subReference.prot=1;
System.out.println(subReference.prot);
}
void notOk(SomeSuper superReference){
superReference.prot=2;
System.out.println(superReference.prot);
}
}
public class ProtectedTest{
public static void main(String[] args){
SomeSub ss=new SomeSub();
ss.ok();
ss.alsoOk(new SomeSub());
ss.notOk(new SomeSuper());
}
}
-----------------------------------------------


------Java 爱好者,论坛小混混,学习中------
2006-04-10 15:17
千里冰封
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:灌水之王
等 级:版主
威 望:155
帖 子:28477
专家分:59
注 册:2006-2-26
得分:0 
这是JAVA中的习惯,子类是一定可以用超类的,前提是超类你导入进来了。
还有,你把你的SomeSuper.java也放在PKG1包里面,这是有道理的,你不试怎么知道不能用呢。
你可以有两种方法。要不就直接写你要导入什么文件。
要不就把你的源文件和类文件放在一个目录下面,并把当前的目录下的源文件SomeSuper.java删掉。

可惜不是你,陪我到最后
2006-04-10 15:40
★王者至尊★
Rank: 1
等 级:新手上路
帖 子:528
专家分:0
注 册:2006-3-28
得分:0 

你说的问题 我解决了
我说的是出现的新问题
是protected变量的问题
我的意思是,ProtectTest.java中:
------------------------------------------
void notOk(SomeSuper superReference){
superReference.prot=2;
System.out.println(superReference.prot);
}
------------------------------------------
这个函数编译器告诉我 用SomeSuper的对象引用protected变量prot是不允许的
但是前面的帖子"有关protected......"中 ,你和狐狸都告诉我是能这样用的
我不明白到底能不能用
这次我说明白了吗?


------Java 爱好者,论坛小混混,学习中------
2006-04-10 15:55
千里冰封
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:灌水之王
等 级:版主
威 望:155
帖 子:28477
专家分:59
注 册:2006-2-26
得分:0 
那当然,因为它的变量是protected的,你要引用的话,只能在包里面用它的实际对象来引用
如果不在包里的话,只能通过它的子类的来访问,它本身是不可以访问的.
你想想看,如果能直接调用superReference.prot=2;的话,那岂不是在包外面也能引用一个类的protected变量了吗?这肯定是不行的.

你要记住,在这个函数里面,传进来的参数是一个完全独立的参数.并且它现在肯定是位于包外的.
如果你想让你的void notOK()正常工作的话,就把那个包去掉.把这两个类放在一个包里面,那就可以用了.

可惜不是你,陪我到最后
2006-04-10 20:07
★王者至尊★
Rank: 1
等 级:新手上路
帖 子:528
专家分:0
注 册:2006-3-28
得分:0 

我明白了 再次感谢冰封!


------Java 爱好者,论坛小混混,学习中------
2006-04-10 21:53



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-56523-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.098806 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved