文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>个人对Java构造方法调用的总结

个人对Java构造方法调用的总结

时间:2010-08-17  来源:zhangxindeshui

1.构造方法必须与定义它的类有完全相同的名字。构造方法没有返回类型,也没有void。

 

2.类可以不声明构造方法,这时类中隐含声明了一个方法体为空的无参构造方法。但当类有明确声明构造方法时,它就不会自动生成。

 

3.构造方法的调用:子类首先要调用父类的构造方法才能继承父类的属性和方法。如果子类的构造方法中没有显式地调用父类的构造方法,则系统默认调用父类无参数的构造方法。说说3种情况:

①父类和子类都没有显式定义构造方法或者只定义了无参构造方法,这种情况下没有问题,Java 会顺着继承结构往上一直找到 Object,然后从 Object 开始往下依次执行构造函数。以下两个例子效果一样,只是Example2有相关输出:

Example1

public class test1 {
    public static void main(String[] args){
        A example =new A();
    }
}

 

class A extends B{
}

 

class B{
}

 

Example2:

public class test {
    public static void main(String[] args){
        A example =new A();
    }
}

 

class A extends B{
    public A(){
         System.out.println("A's constructor is invoked.");
    }
}

class B{
    public B(){
        System.out.println("B's constructor is invoked.");
    }

}

输出:B's constructor is invoked

   A's constructor is invoked

 

②父类只定义有参构造方法,那么无论子类如何定义,编译都会报错,因为父类缺少了默认无参构造方法,需要显式定义。

public class test {
    public static void main(String[] args){
        A example =new A(3);
    }
}

 

class A extends B{
    public A(int a){
       System.out.println("A's constructor is invoked."+"a="+a);
    }
}

 

class B{
    private int b=0;
    //public B(){
    //    System.out.println("B's constructor is invoked.");
    //}
   
    public B(int b){
        System.out.println("B's constructor is invoked."+"b="+b);
    }
}

把注释符去掉就可以编译,输出:B's constructor is invoked.
               A's constructor is invoked.a=3

 

③在父类只有有参构造方法而没有无参构造方法时,可以用super(参数)来调用父类构造方法,但super无参时需要父类的无参构造方法。

public class test {
    public static void main(String[] args){
        A example =new A(3);
    }
}

 

class A extends B{
    public A(int a){
        super(a);
        System.out.println("A's constructor is invoked."+"a="+a);
    }
}

class B{
    private int b=0;
   
    public B(int b){
        System.out.println("B's constructor is invoked"+"b="+b);
    }

}

输出:B's constructor is invoked.b=3
        A's constructor is invoked.a=3

此处指定用super(3)调用public B(int b),所以就有如下输出:

B's constructor is invoked.b=3
A's constructor is invoked.a=3

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载