На самом деле, я не думаю, что это возможно.
Вы создаете синглтон класса, объявляя его конструктор (ы) равным private
. Но если вы затем попытаетесь объявить подкласс вашего синглтон-класса, конструктор подклассов не сможет увидеть конструкторы суперкласса ... поэтому они не будут компилироваться; например,
public class A () {
private A() { }
}
public class B () {
private B() { }
}
И компилятор Sun JDK 1.6, и Eclipse Ganymede выдают ошибку компиляции в конструкторе B, в результате чего конструктор no-args для A не виден.
Вы можете увеличить видимость конструкторов private
, но тогда ничто (кроме здравого смысла) не мешает кому-то создавать несколько его экземпляров. Другими словами, это уже не единственный класс.
РЕДАКТИРОВАТЬ: я предполагаю, что кошерной альтернативой было бы определить дерево одного или нескольких абстрактных (не одноэлементных) классов с методами / членами, которые вы хотите использовать как общие, а затем определить несколько одноэлементных классов как листовые классы как подходящее. Но это НЕ один одноэлементный класс, подклассифицирующий другой.