小白关于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);
}
}
//运行结果
父类中无参构造方法被调用
子类中无参构造方法被调用
-----------
父类中有参构造方法被调用
子类中有参构造方法被调用
注:显示调用父类构造方法只能用在第一条代码
其中有引用内容,如有侵权,联系马上删