:
public class Outer
{
public Outer() {}
class Inner1 extends Outer
{
public Inner1()
{
super();
}
}
class Inner2 extends Inner1
{
public Inner2()
{
super();
}
}
}
.
Outer.java:12: cannot reference this before
supertype constructor has been called
super();
Inner2 ,
. , ,
Inner1, , - . ,
,
expression.super(args)
, :
,
. , , , ,
. Inner1. ,
Inner2, , Inner1 . ,
- .
, this.super.
Inner2
this , .
:
public class Outer
{
class Inner1 extends Outer { }
class Inner2 extends Inner1
{
public Inner2()
{
Outer.this.super();
}
}
}
, . :
, -, :
? , .
, ,
. ,
. Inner1 ,
. Inner2 , ,
.
Thus, for one class it is rarely both an inner class and a subclass of another. More generally, it is rarely advisable to expand the inner class; if you must, think long and hard about the host. Most member classes can and should be declared static.