`
guojianhui0906
  • 浏览: 46136 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

调用java构造方法的总结

    博客分类:
  • java
 
阅读更多
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
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics