跨包之间访问protected类型的问题

woxin 2001-08-23 06:00:37
//file:PackagedClass.java
package c05;

public class PackagedClass{
public PackagedClass(){
System.out.println("Creating a packaged class");
}

protected void f() {
System.out.println("protedted access identifier");
}
}

//file:Foreign.java
package c05.foreign;

import c05.*;

public class Foreign{
public static void main(String[] args) {
//PackagedClass pc = new PackagedClass();
//pc.f();
PackagedClassSub pcs = new PackagedClassSub();
pcs.f();
}
}

class PackagedClassSub extends PackagedClass {
public void test()
{
f();
}

}

编译时,pcs.f()出错,说:No method matching f() found in class c05.foreign.PackagedClassSub.
但是据我所知:子类(这里是PackagedClassSub)可以跨包访问父类(这里是PackagedClass)的protected方法f(),thinking in java书上也是这么说的,为什么会编译出错呢??
...全文
200 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
qian_x_j 2001-08-24
  • 打赏
  • 举报
回复
对不起,我说错了.
对于 protected method除了包内或者子类以外,是不可以访问的,f()在于PackagedClassSub类中是protected,所以外部不可访问.
qian_x_j 2001-08-24
  • 打赏
  • 举报
回复
写代码应该有缩进,这种格式很容易看错的:
你的PackagedClassSub类只有一个方法——test(),f()只是test中的调用。
这跟“跨包之间访问protected类型的问题”没有任何关系。
Jacky1206 2001-08-23
  • 打赏
  • 举报
回复
抱歉,该问题我也曾经疑惑过,但答案好象是如ender所说,由于Foreign不是packagedclass的子类,就算在他的代码中实现了对象,也不行。
woxin 2001-08-23
  • 打赏
  • 举报
回复
但pcs不是PackagedClassSub的对象吗,该对象是否能访问f()方法由该对象所处的地方有关吗?
该对象如果在Foreign类中就不能访问f(),该对象如果在PackagedClassSub中就能方法f()方法?是这样吗
ender 2001-08-23
  • 打赏
  • 举报
回复
你如果是想跨包访问的话,该用pcs.test();而不是pcs.f();

PackagedClassSub是PackagedClass的子类,可以访问PackagedClass的方法,但Foreign不是PackagedClass的子类,所以不能访问……
hexiaofeng 2001-08-23
  • 打赏
  • 举报
回复
错了
hexiaofeng 2001-08-23
  • 打赏
  • 举报
回复
No method matching f() found in class c05.foreign.PackagedClassSub

c05.foreign.PackagedClassSub 无方法 f()

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧