黑马程序员技术交流社区

标题: 匿名内部类 [打印本页]

作者: 李文肖    时间: 2011-10-8 11:13
标题: 匿名内部类
例如,在return new Contents(){};中,会创建一个继承自Contents的匿名类的对象,那这个new Contents()不是应该调用的Contents的构造函数吗。
在如果,在需要参数时,如return new Contents(i){};中,到底这个参数是由导出类传递给基类的,还是直接在基类的构造器中使用的。
大家帮忙下啊~!!
作者: 林国锋    时间: 2011-10-8 11:31
public class Test{
    public static void main(String[] args)
    {
        Contents con = getContents(12);
    }
    public static Contents getContents(int i)
    {
        return new Contents(i){
            System.out.println(i); //你在这里测试一下就可以知道是不是i是在哪里传入的了
        };
    }
}
作者: 张雷    时间: 2011-10-8 11:39
在return new Contents(){};中,会创建一个继承自Contents的匿名类的对象,那这个new Contents()不是应该调用的Contents的构造函数吗。
答:会调用,调用的是Contents的无参构造方法

在如果,在需要参数时,如return new Contents(i){};中,到底这个参数是由导出类传递给基类的,还是直接在基类的构造器中使用的。。
答:在构造器中使用,此时你的基类应该有一个带参数的构造器
作者: 张雷    时间: 2011-10-8 11:39
在构造子类对象之前需要构造父类对象,返回的对象还是子类对象,所以会调用父类的构造函数
而传递的参数只是在父类的构造函数中赋值给子类继承的属性的值
Java code
public Test1(int a)
{
     this.a = a;//给子类继承的属性a赋值
}


new Test1(1)//调用父类的带参数构造函数
{
            
};




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2