9

我想知道如果方法是公共的或在受包保护的类中受包保护,是否有任何区别。

class Example {
  public void test() {}
}

代替

class Example {
  void test() {}
}

我想最大的能见度是由班级给出的。而一种方法只能降低可见度,增加可见度没有效果。

但它是有效的语法,所以也许我监督了一些事情?

4

3 回答 3

8

如果我们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();
  }
}
于 2013-04-17T20:16:53.567 回答
7

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

于 2013-04-17T20:11:24.840 回答
0

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

于 2013-04-17T20:14:01.747 回答