Java访问说明符问题
我对Java中的访问说明符感到困惑。。我有一个包含两个不同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
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扩展了测试,使之成为测试的子类..我可以在这个类中调用测试方法吗?