我在thinking in java 里看到了有这样个例子:
class WithInner{
class Inner{
}
}class InheritInner extends WithInner.Inner{
public InheritInner(WithInner wi){
wi.super();
}
public static void main(String[] args){
WithInner wi=new WithInner();
InheritInner ii=new InheritInner(wi);
}
}
于是自己仿照写了如下的程序:
class Outer{
private String name;
private Inner in;
public Outer(){
name="Outer";
in=new Inner("Inner");
System.out.print("It's name is ");
System.out.println(name);
}
public class Inner{
private String name;
public Inner(String name){
this.name=name;
System.out.print("My name is ");
System.out.println(name);
System.out.print("My SuzhuClass's name is ");
System.out.println(Outer.this.name);
}
}
public void display(){
System.out.println(name);
}
}class ExtendsInner extends Outer.Inner{
public ExtendsInner(Outer ot){
ot.super();
System.out.println("It is in ExtendsInner");
}
public static void main(String[] args){
Outer ot=new Outer();
ExtendsInner ei=new ExtendsInner(ot);
}
}
编译时提示在 ot.super 一句找不到符号。百思不得其解,请求各位火力支援!
class WithInner{
class Inner{
}
}class InheritInner extends WithInner.Inner{
public InheritInner(WithInner wi){
wi.super();
}
public static void main(String[] args){
WithInner wi=new WithInner();
InheritInner ii=new InheritInner(wi);
}
}
于是自己仿照写了如下的程序:
class Outer{
private String name;
private Inner in;
public Outer(){
name="Outer";
in=new Inner("Inner");
System.out.print("It's name is ");
System.out.println(name);
}
public class Inner{
private String name;
public Inner(String name){
this.name=name;
System.out.print("My name is ");
System.out.println(name);
System.out.print("My SuzhuClass's name is ");
System.out.println(Outer.this.name);
}
}
public void display(){
System.out.println(name);
}
}class ExtendsInner extends Outer.Inner{
public ExtendsInner(Outer ot){
ot.super();
System.out.println("It is in ExtendsInner");
}
public static void main(String[] args){
Outer ot=new Outer();
ExtendsInner ei=new ExtendsInner(ot);
}
}
编译时提示在 ot.super 一句找不到符号。百思不得其解,请求各位火力支援!
所以它的构造函数首先要蕴含Outer.Inner的构造函数
你的Outer.Inner没有无参的构造函数,所以你的ExtendsInner的构造函数中必须写明怎么调用父类的构造函数的。
super是调用父类的构造函数,但是由于要调用内部类的构造函数,必须和一个外部类的对象引用相关联,所以需要ot.super("wantingfreedom (自由风)");这种形式