【发布时间】:2018-06-22 09:35:59
【问题描述】:
我对 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
}
}
但是当我运行代码时,我收到一个错误“测试在 p1 中不公开;无法从外部包访问”..
我在这个帖子中了解到,我们可以在不同的包之间使用受保护的方法,但可以通过另一个类来扩展它。In Java, difference between package private, public, protected, and private
提前致谢。
【问题讨论】:
-
public class Testing.. 你的 CLASS 本身是不公开的。 -
您没有从子类调用方法。您只是在子类的 一个实例 上调用它。除了它是静态的,所以你也没有真正这样做。
t1.find(...)等同于调用Testing.find(...)令人困惑。 -
@AniketSahrawat 先生,我在线程中读到了这篇文章,您可以使用受保护的说明符在包外使用方法..
-
@AkshitGupta 仅来自子类。
Xyz不是Testing的子类,因此protected不授予访问权限。只有public会。 -
@Andreas Sir,类 pqr 扩展了测试,使其成为测试的子类。我可以在这个类中调用测试方法吗?
标签: java access-specifier