构造方法

    xiaoxiao2021-08-19  102

    一、概念

    从字面上理解即为构建创造时用的方法,即就是对象创建时要执行的方法。通俗的说就是在new对象时,就会调用构造方法中的内容给属性进行赋值。

    格式:

    权限 方法名(参数列表){ 属性赋值 } 注意:没有返回值,也没有返回值类型;方法名与类名一致。

    二、基本应用

    单个测试类调用

    测试类:

    public class Test { public static void main(String[] args) { //初始化Cat并赋值参数3 new Cat(3); } } 猫类:

    public class Cat { //定义私有变量age private int age; //有参构造方法 public Cat(int age){ this.age=age; System.out.println("小猫咪"+age+"岁了"); } //获得属性age值 public int getAge() { return age; } //给成员变量赋值 public void setAge(int age) { this.age = age; } } 打印结果:

    三、super应用

    子父类构造方法

    测试类:

    public class Test { public static void main(String[] args) { //初始化子类 new Zi(); } } 子类:

    public class Zi extends Fu{ //子类的构造方法 public Zi(){ System.out.println("子类构造方法"+num); } } 父类:

    public class Fu { //父类构造方法 int num; public Fu(){ System.out.println("父类构造方法"+num); num+=4; } } 打印结果:

    解析:

    Test测试类中调用new Zi,此时会调用子类的构造方法,子类的构造方法中默认第一行是super(),即调用父类的空参构造方法,所以打印出父类的内容,之后再打印子类中内容。

    变换一:子类自身定义成员变量

    public class Zi extends Fu{ int num; //子类的构造方法 public Zi(){ System.out.println("子类构造方法"+num); } }

    打印结果:子类优先使用自己定义的成员变量。

    变换二:super方法传参

    测试类:

    public class Test03 { public static void main(String[] args) { //初始化子类并赋值传参内容baby Zi z=new Zi("baby"); System.out.println(z.getName()); } } 子类:

    public class Zi extends Fu{ //子类的构造方法 public Zi(String name){ //调用父类的有参构造方法 super(name); } } 父类:

    public class Fu { private String name; //定义父类有参构造方法 public Fu(String name){ this.name=name; } public String getName() { return name; } public void setName(String name) { this.name = name; } } 打印结果:

    解析:

    在初始化子类对象的时候将参数为String类型的baby传过去给子类,子类调用supername)也就是父类的有参构造方法,将baby赋值给成员变量,最后在Test测试类中打印出名字。

    四、this关键字

    测试类:

    public class Test { public static void main(String[] args) { //初始化子类 new Zi(); } } 子类:

    public class Zi extends Fu{ //子类的无参构造方法 public Zi(){ //调用含参重载方法Zi this("你好"); } //子类的有参构造方法,在此处默认会调用super(),也就是父类无参的构造方法 public Zi(String name){ System.out.println("调用我了"); } } 父类:

    public class Fu { //父类构造方法 public Fu(){ System.out.println("父类构造方法"); } } 打印结果:

    解析:

    this指的是调用同类中重载的其他方法,此时调用的是public Zi(String name),同时因为默认有super(),此时调用父类的无参构造方法。

    变换一:

    子类:

    public class Zi extends Fu{ //子类的无参构造方法 public Zi(){ //调用含参重载方法Zi this("你好"); } //子类的有参构造方法,在此处默认会调用super(),也就是父类无参的构造方法 public Zi(String name){ //调用父类的有参构造方法 super(name); System.out.println("调用我了"); } } 打印结果:

    解析:因为此时有super(name)即明确了调用的父类方法,所以不再调用无参构造方法

     

    五、小结

     

    构造方法其实就是new的时候调用的方法,super()是调用父类的方法,如果指明调用则直接调用对应的构造方法,如果没有写明则调用父类无参的构造方法。This()是调用同类中重载的构造方法,这个和我们之前学习的方法调用时一样的。但是this()方法和super()方法是不可以在一个构造方法里同时使用的。

     

    这次对构造方法有了比较深入的了解,真的觉得你学过的东西或是读过的书都会化为你身体的一部分,也许当时你未必理解,可是一旦一扇门打开,接着将是豁然开朗。

    转载请注明原文地址: https://ju.6miu.com/read-676638.html

    最新回复(0)