class Wrapping
{
private int i;
public Wrapping(int i)
{
this.i=i;
}
public int value()
{
return i;
}
}class Parce
{
public Wrapping wrap(int x)
{
return new Wrapping(x)//执行了这句,x是传到哪里了?是传给Wrapping类中构造方法了吗?
{
public int value(int i)
{
return super.value()*10;//在这个类里没有继承其它类,怎么能用super关键字呢
}
};
}

public static void main(String[] args)
{
Parce p=new Parce();
Wrapping w=p.wrap(10);
}
}
上面的代码是书上看不懂的。书上还有下面这段话,也不理解,请各位高手朋友,帮忙解答一下,谢谢。只要将适当引数传入base class构造方法中,就像将x传入new Wrapping(x)中一样。匿名class不能拥有构造方法,所以通常会调用super().
上面的这段话是什么意思啊,不理解。在上面的代码中,两个类并没有继承,是两个独立的类呀。

解决方案 »

  1.   

    这个是匿名内部类,“只要将适当引数传入base class构造方法中,就像将x传入new Wrapping(x)中一样。匿名class不能拥有构造方法,所以通常会调用super().”
    不管什么子类,实例化时都会去调用父类的构造方法,在这个例子中,有一个匿名内部类继承了 Wrapping,
    所以该匿名内部类调用了 Wrapping 的构造方法。。
      

  2.   

    wrap()方法返回一个匿名类对象,匿名类是重写了Wrapping类的value()方法的子类
    匿名类没有名字,也就不能有构造方法,所以super()总是自动被调用
    super.value()是调用父类的value()方法
      

  3.   

    不是Parce类继承Wrapping类,而是匿名内部类的value方法继承了其父类的方法。一家之言,提供思路,等高手继续……
      

  4.   

    如果在 Parce p=new Parce();
          Wrapping w=p.wrap(10);
    这两句的下面写上一句
           w.value();
    这是调用了Wrapping类的 value方法,还是匿名内部类的value方法呢?还是两个一起调用了呢?
      

  5.   

    首先
    return new Wrapping(x)//执行了这句,x是传到哪里了?是传给Wrapping类中构造方法了吗?
            {
                public int value(int i)
                {
                    return super.value()*10;//在这个类里没有继承其它类,怎么能用super关键字呢
                }
            };
    这句话返回了一个匿名内部类对象,而这个对象它在构造是调用了父类的构造方法(匿名内部类没有构造方法,只有默认调用父类的构造方法),也就是说这个x被传到父类的构造方法中,然后,该匿名内部类有覆盖了value()方法。在主方法main里面调用时,根据多态的特性,将调用这个覆盖后的value()方法。