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直接构建具体类的实例。
本文介绍了一个非公开类中如何定义并使用公共静态方法。通过具体代码示例展示了如何从其他类中调用非公开类的公共方法,同时保持了类的封装性,避免了客户端直接创建非公开类的实例。

被折叠的 条评论
为什么被折叠?



