我对Java中的访问说明符感到困惑。我在Java中有一个包含2个不同包的代码。但是每次运行它都会显示错误..这里是该类的代码,它是使用从另一个包导入来调用该类..
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
}
}
但是当我运行代码时出现错误&#34;测试在p1中不公开;无法从外部包裹访问&#34; ..
我在这个帖子中了解到,我们可以在不同的包之间使用protected方法,但是可以通过另一个类扩展它。In Java, difference between package private, public, protected, and private
提前致谢。
答案 0 :(得分:1)
您无法访问顶级类(在您的情况下是Testing
),因此无论访问修饰符是什么,您都无法访问其成员。您需要公开Testing
以使其受保护的成员从其包的外部可见到扩展Testing
的类。您可以在Java教程中阅读更多相关信息。以下是关于Testing
类的访问修饰符的部分:
可以使用修饰符public
声明一个类,在这种情况下,该类对所有类都可见。如果一个类没有修饰符(默认值,也称为包私有),它只在其自己的包中可见
关于find()
方法的部分:
protected
修饰符指定只能在自己的包中访问该成员(与package-private一样),此外,还可以在另一个包中使用其类的子类。
但是为了利用另一个包中包含的类的protected
成员,包含它的类本身需要在另一个包中可见(它需要是public
)。强>
有关访问修饰符的更多信息,请查看此Java教程: https://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html