包访问类|(公共和受保护的不同)

时间:2015-01-16 14:24:22

标签: java

如果我有一个像这样的pacakage访问类:

package AA;

class A {    
  // ...    
}

只能由包AA上的类访问。将此类方法声明为protectedpublic之间有什么区别? 是不是一样,因为这个类只能从它的pacakge访问?

2 个答案:

答案 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()