小白关于Java构造方法的一些理解

一、什么是构造方法

概述

构造方法存在于类中,给对象数据(属性)初始化;

特点

方法名与类名一样;无返回值无void;

默认构造方法

不创建一个构造方法时,系统默认提供一个无参构造;当我们创建一个构造方法时,系统不再提供无参构造

构造方法的调用

构造方法在新建对象时被调用也就是new的时候

public class Animal {
//成员变量    
    private String name;
    private int age;
//无参构造方法
    public Animal() {
    }
//带参构造方法
    public Animal(String name, int age) {
        this.name = name;
        this.age = age;
    }
//成员方法
    public void eat(){
        System.out.println("动物吃东西");
    }
}

二、构造方法的重载

重载是指在同一个类中,有多个方法名相同(如前面的一个类中的多个构造方法也是重载),参数列表不同(参数个数/类型)可以理解为重载是一个类中的多态。

public class Animal {
//成员变量    
    private String name;
    private int age;
//构造方法
    public Animal() {
    }
//构造方法重载
    public Animal(String name, int age) {
        this.name = name;
        this.age = age;
    }
    //构造方法重载
    public Animal(String name, int age,String weight) {
        this.name = name;
        this.age = age;
        this.weight = weight;
    }
}

重载:存在于在一个类中,方法名相同,方法参数的类型或个数不同
重写:存在于子父类中,方法名、方法参数、返回值全部相同
在一个类中,可以有多个构造方法(方法参数不同),即重载,来实现对象属性不同的初始化;但是子类中不能定义一个方法无void无返回值的方法,编译错误,即子类无法继承构造方法,但是子类的构造方法中可以调用父类的构造方法(默认自动调用无参构造)
所以:构造方法可以重载,不能重写

四、继承中构造方法的访问特点

//父类方法
public class Fu {
    public Fu() {
        System.out.println("父类中无参构造方法被调用");
    }
    public Fu(int i) {
        System.out.println("父类中带参构造方法被调用");
    }
}
//子类方法
public class Zi extends Fu{
    public Zi() {
        System.out.println("子类中无参构造方法被调用");
    }

    public Zi(int i) {
        System.out.println("子类中带参构造方法被调用");
    }
}
//测试类
public class Demo {
    public static void main(String[] args) {
        Zi z = new Zi();
        System.out.println("-----------");
        Zi z2 = new Zi(1);
    }
}


//运行结果
父类中无参构造方法被调用
子类中无参构造方法被调用
-----------
父类中无参构造方法被调用
子类中有参构造方法被调用

子类中所有的构造方法默认都会访问父类中无参的构造方法

原因:

1.因为子类会继承父类中的数据,可能还会使用父类的数据。所以,子类初始化之前,一定要先完成父类数据的初始化
2.每一个子类构造方法的第一条语句默以认都是:super();

五、继承中构造方法的访问特点(显示调用父类构造方法时)

//父类方法
public class Fu {
    public Fu() {
        System.out.println("父类中无参构造方法被调用");
    }
    public Fu(int i) {
        System.out.println("父类中有参构造方法被调用");
    }
}
//子类方法
public class Zi extends Fu{
    public Zi() {
        System.out.println("子类中无参构造方法被调用");
    }

public Zi(int i) {
	super(i);//显式调用父类构造方法
        System.out.println("子类中有参构造方法被调用");
    }
}
//测试类
public class Demo {
    public static void main(String[] args) {
        Zi z = new Zi();
        System.out.println("-----------");
        Zi z2 = new Zi(1);
    }
}
//运行结果
父类中无参构造方法被调用
子类中无参构造方法被调用
-----------
父类中有参构造方法被调用
子类中有参构造方法被调用

注:显示调用父类构造方法只能用在第一条代码

其中有引用内容,如有侵权,联系马上删

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值