我在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 一句找不到符号。百思不得其解,请求各位火力支援!

解决方案 »

  1.   

    因为你在内类Inner里重载了一个接受Sring的构造函数,所以以必须还要自己写一个不接受参数的构造函数,所以在你用ot.super()调用的时候自然找不到符号.
    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()\\加上这个,编译通过
      {
      }
      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);
    }
    }
      

  2.   

    public Inner(String name)这是你的内部类的一个构造器,不是默认的没有参数的。正因为这个你的默认的没有参数的构造器public Inner()就不会自动创建了,因此ot.super()就不能调用默认的构造器。当你自己创建一个构造器时,默认的构造器是不是自动创建的,这时,如果你还需要用这个没有参数的构造器就需要显示的创建。