package com.jaeson.javastudy.effectivejava;
public abstract class PublicMethodInNonPublicClass {
public static PublicMethodInNonPublicClass getInstance() {
return new NonPublicClass();
}
public abstract void show();
}
class NonPublicClass extends PublicMethodInNonPublicClass {
@Override public void show() {
System.out.println("NonPublicClass.show is calling...");
}
}
/
package com.jaeson.javastudy;
import com.jaeson.javastudy.effectivejava.*;
public class TestNonPublicClass {
public static void main(String[] args) {
PublicMethodInNonPublicClass npc = PublicMethodInNonPublicClass.getInstance();
npc.show();
//wrong:NonPublicClass is not visible
//new NonPublicClass();
}
}
* 可以隐藏类的实现细节,只对外提供接口,客户端无法通过import直接构建具体类的实例。