好像有这样一个面试题:如果一个类是非public的,那么它的方法声明为public有什么用吗?
看这种情况:
package test; public abstract class Test { public abstract void test(); public static Test getInstance(){ return new SubTest(); } } class SubTest extends Test{ @Override public void test() { System.out.println("SubTest's test()"); } } 测试用代码: import test.Test; public class Main { public static void main(String[] args) { Test t = Test.getInstance(); t.test(); } }
对外有意义的也就这一种情况了。
其实,这种用法在java类库中也是比较多见的。比如Java集合类框架中的迭代器类,下面是AbstractArrayList中的代码:
private class Itr implements Iterator<E> { //具体实现略 } //迭代器 public Iterator<E> iterator() { return new Itr(); }