Java访问说明符问题

Java访问说明符问题,java,access-specifier,Java,Access Specifier,我对Java中的访问说明符感到困惑。。我有一个包含两个不同Java包的代码。。但每次我运行它时,它都会显示一个错误。。下面是使用从另一个包导入调用该类的类的代码 package p2; import p1.Testing; class Pqr extends Testing{ // extending the class void hey(){ System.out.println("Something"); } } class Xyz{ publ

我对Java中的访问说明符感到困惑。。我有一个包含两个不同Java包的代码。。但每次我运行它时,它都会显示一个错误。。下面是使用从另一个包导入调用该类的类的代码

package p2;

import p1.Testing;

class Pqr extends Testing{ // extending the class 
    void hey(){
        System.out.println("Something");
    }
}

class Xyz{
    public static void main(String args[]){
    Pqr t1 = new Pqr(); // Class from another package.
    System.out.println(t1.find("Mississippi","p"));
    t1.hey();
    }
}
正在从包p1子类化的类的代码

package p1;
class Testing{
    protected static boolean find(String a,String b){ // Protected specifier
        boolean ans = false;
        for(int i=0;i<a.length();i++){
            String m = a.charAt(i) + "";
            if( m.equals(b)){
                ans = true;
            }
        }    

    return ans;
}

    public static void main(String args[]){

    // Main Class

    }

}
p1包;
类测试{
受保护的静态布尔查找(字符串a、字符串b){//受保护的说明符
布尔ans=假;
对于(int i=0;i


提前感谢。

您没有访问顶级类的权限(在您的情况下,它是
测试
),因此,无论其访问修饰符是什么,您都无法访问其成员。您需要将
测试
公开,以使其受保护的成员在扩展
测试
的类的包外可见。您可以在Java教程中阅读更多有关它的内容。这里是关于
测试
的访问修饰符的部分驴:

一个类可以用修饰符
public
声明,在这种情况下,该类对任何地方的所有类都是可见的。如果一个类没有修饰符(默认值,也称为包私有),则该类仅在其自己的包中可见

还有关于
find()
方法的部分:

protected
修饰符指定成员只能在其自己的包中访问(与包private一样),此外,还可以通过另一个包中其类的子类访问

但要使用另一个包中包含的受保护的类成员,包含它的类本身需要在另一个包中可见(它需要是
公共的
)。

有关访问修饰符的更多信息,请参阅本Java教程:

公共类测试
。您的类本身不是公共的。您不是从子类调用方法。您只是在子类的实例上调用它。只是它是静态的,所以您也不是真正这样做。
t1.find(…)
与调用
测试.find(…)是一个令人困惑的等价物
@AniketSahrawat Sir我在线程中读到这一点,你可以在包外使用方法,使用受保护的说明符。@AkshitGupta只能从子类中使用。
Xyz
不是
测试的子类,所以
受保护的
不授予访问权限。只有
公共的
才会这样做。@Andreas先生,类pqr扩展了测试,使之成为测试的子类..我可以在这个类中调用测试方法吗?