在受保护的类中是否有任何公共方法的原因?

时间:2013-04-17 20:09:48

标签: java class-visibility

我想知道如果一个方法在受包保护的类中是公共的或包受保护的话会有什么不同。

class Example {
  public void test() {}
}

而不是

class Example {
  void test() {}
}

我猜最大的可见度是由班级给出的。并且一种方法只能降低可见度,增加可见性无效。

但它是有效的语法,所以也许我已经监督了什么?

3 个答案:

答案 0 :(得分:6)

如果Example实现了某种类型的界面,则必须将其公开,因为在这种情况下您无法减少访问权限。默认情况下,所有接口方法都是公共的。

答案 1 :(得分:5)

如果我们将Example子类化为public类,那么包外的代码可以使用子类实例访问test()方法,如果它是public

示例:

package A;
class Example {
   public void test() {}
}

package A;
public class SubExample extends Example {
}

package B;
import A.SubExample;
class OutsidePackage {
  public void some method(SubExample e){
    // Had test been defined with default access in class Example
    // the below line would be a compilation error.
    e.test();
  }
}

答案 2 :(得分:0)

如上所述,它什么都不做。如果它是子类或接口实现,那么它可能正在实现或覆盖在其他地方声明为public的方法。