包私有类中的公共方法
2022-08-31 21:29:48
						将方法标记为在包私有类中是否有区别?public
class SomePackagePrivateClass
{
    void foo();          // package private method
    public void bar();   // public method
}
和这里之间的可见性是否有任何实际差异?foobar
将方法标记为在包私有类中是否有区别?public
class SomePackagePrivateClass
{
    void foo();          // package private method
    public void bar();   // public method
}
和这里之间的可见性是否有任何实际差异?foobar
使用继承的示例:
答.java
package pkg1
class A {
  void foo();
  public void bar() {};
}
乙.java
package pkg1
public class B extends A{
}
C.java
package pkg2
public class C {
  public void doSomething() {
   B b = new B();
   b.bar(); //ok
   b.foo(); //won't work, since foo() is not visible outside of package 'pkg1'
   A a = new A(); //won't work since A is not visible outside of package 'pkg1'
   a.bar(); //won't work, since a cannot be created
  }
}
如果该类不打算由另一个更明显的子类*扩展,则唯一的区别是意图的清晰度。将所有方法包声明为私有会使将来的读者更难确定哪些方法应由同一包中的其他类调用。
*这对我来说作为设计解决方案没有多大意义,但从技术上讲仍然是可能的。