Ниже обойдено это ограничение.
Обходное решение - передать объект временного держателя конструктору суперкласса.Затем, после того как конструктор суперкласса выполнил свою работу, передайте объекту временного держателя ссылку на него.
Параметр delta может использоваться для демонстрации основного недостатка этого обходного пути - что, если конструктор суперкласса должен использоватьпараметр.
import java . lang . reflect . * ;
import java . util . * ;
class Father
{
public static void main ( String [ ] args )
{
( new Son ( args . length > 0 ) ) . run ( ) ;
}
Father ( Runnable runnable , boolean delta )
{
super ( ) ;
if ( delta )
{
runnable . run ( ) ;
}
}
}
class Son extends Father implements Runnable
{
private static Map < Thread , TempRunnable > temps = new HashMap < Thread , TempRunnable > ( ) ;
private static class TempRunnable implements Runnable
{
private Son son ;
TempRunnable ( )
{
super ( ) ;
temps . put ( Thread . currentThread ( ) , this ) ;
}
public void run ( )
{
son . run ( ) ;
}
}
Son ( boolean delta )
{
// super ( this ) ; // the dream
super ( new TempRunnable ( ) , delta ) ;
temps . get ( Thread . currentThread ( ) ) . son = this ;
}
public void run ( )
{
System . out . println ( "Hello World" ) ;
}
}