两个包,一个Base包,一个Lone包Base包如下:package Base;
import Lone.LoneClass;
public class BaseClass {
protected int id = 1;
public void p(String s){
System.out.println("p() BaseClass:"+s);
}void f(String s){
System.out.println("f() BaseClass:"+s);
g("BaseClass");
}
protected void h(String s){
System.out.println("h() BaseClass:"+s);}
}
class UpClass extends BaseClass {
BaseClass bc2= new BaseClass();
public void f(String s) {
System.out.println("f() UpClass:"+s);
h("UpClass"); //直接调用
bc2.h("UpClass");//间接调用,可以执行

}
}Lone包如下:
package Lone;import Base.BaseClass;public class OutClass extends BaseClass{
public void g(String s){
bc.p("OutClass");
id=2;
h("OutClass");
//bc.h("OutClass");//这个调用错误,为什么
}
BaseClass bc = new BaseClass();
}

解决方案 »

  1.   

    protected void h(String s)
    你用的protected
    他的访问权限是同一个包中
    你的两个类没有在同一个包中,就访问不到了
    你把它设成public的就可以了
      

  2.   

    直接调用需要方法为静态(STATIC),非静态方法需要NEW个对象再调用。而new对象能否访问要看方法的访问权限 
      

  3.   

    protected不是包限制的,friendly是包限制
      

  4.   

    protected的权限可不是在一个包中,我在不一个包的子类里面,可以直接调用父类的protected函数,为什么里面生命的父类对象,反倒不能访问自己的protected函数。注:设成public确实可以