如果我有一个像这样的pacakage访问类:
package AA;
class A {
// ...
}
只能由包AA
上的类访问。将此类方法声明为protected
或public
之间有什么区别?
是不是一样,因为这个类只能从它的pacakge访问?
答案 0 :(得分:1)
包AA可能有一个扩展A的公共类B.
在这种情况下,来自不同包的C类可以创建B的实例并为该实例调用A的任何公共方法。
但是,如果将A的方法定义为受保护的,则C必须是B的子类才能调用这些方法。
package AA;
class A
{
public void foo() {}
protected void bar() {}
}
package AA;
public class B extends A
{
}
package BB;
public class C extends B
{
public void func ()
{
super.bar (); // OK, since bar is protected and C extends B
// which extends A
}
public static void main (String[] args)
{
B b = new B();
b.foo(); // OK, since foo is public
b.bar(); // doesn't compile, since bar is protected
}
}
答案 1 :(得分:0)
使用反射时会有所不同,例如Class.getMethods()