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().
上面的这段话是什么意思啊,不理解。在上面的代码中,两个类并没有继承,是两个独立的类呀。
不管什么子类,实例化时都会去调用父类的构造方法,在这个例子中,有一个匿名内部类继承了 Wrapping,
所以该匿名内部类调用了 Wrapping 的构造方法。。
匿名类没有名字,也就不能有构造方法,所以super()总是自动被调用
super.value()是调用父类的value()方法
Wrapping w=p.wrap(10);
这两句的下面写上一句
w.value();
这是调用了Wrapping类的 value方法,还是匿名内部类的value方法呢?还是两个一起调用了呢?
return new Wrapping(x)//执行了这句,x是传到哪里了?是传给Wrapping类中构造方法了吗?
{
public int value(int i)
{
return super.value()*10;//在这个类里没有继承其它类,怎么能用super关键字呢
}
};
这句话返回了一个匿名内部类对象,而这个对象它在构造是调用了父类的构造方法(匿名内部类没有构造方法,只有默认调用父类的构造方法),也就是说这个x被传到父类的构造方法中,然后,该匿名内部类有覆盖了value()方法。在主方法main里面调用时,根据多态的特性,将调用这个覆盖后的value()方法。