构造函数
构造函数的引入:
在C++中,为什么引用构造函数,原因:
首先我们的知道C++创建类变量的途径有:声明变量,使用new关键字,函数返回一个对象,将另一个变量赋值给变量
当我们创建一个实例的时候,如果我们直接使用声明变量的方法,例如:People p ;p对象中的属性会被初始化为0,然后我们会调用公有方法来初始化私有变量,这样比较麻烦,如果我们想直接在创建变量的时候直接给类变量赋值给我们想要的值,在这样的需求下,构造函数被引进
默认构造函数是在为提供显式初始值时,用来创建对象的构造函数,当我们使用People p;如果没有提供任何构造函数,则C++将自动提供默认的构造函数;但是这样创建的对象,没有初始化,当没有定义任何构造函数的时候,编译器才会使用默认构造函数,如果提供了非默认构造函数,但没有提供默认构造函数,使用People p;将出错;
Java:
构造器的引用是为了初始化;
Java中创建一个对象的方法有:new关键字,反射,clone....
当声明一个类变量的时候,我们需要将其指向一个在堆中真实存在的对象,如果没有,系统将提示我们初始化变量;
当使用new关键字创建一个对象的时候,系统会为该对象的属性进行初始化,基本类型属性的值为0(数值类型),false(布尔类型),把所有的引用类型设置为null.如果想初始化特定的值,构造器可以帮我们创建特定初值的对象;
在Java中使用new关键字创建对象,当使用new ClassName()时,将调用类的默认空参构造器,如果对类的构造器进行重载,会隐藏默认的构造器,在创建对象的时候调用重载的构造器不会报错,如果想调用默认的构造器,会报错,因为被重载的构造器覆盖起来,要么删除重载的构造器,要么显式的写一个空参的构造函数;这个和C++一样;
注意:构造器不是函数,它和类名相同,没有返回值,不能被继承,可以被重载,构造器是用来创建对象的,如果可以被继承,则父类对象就可以被复制,即可以创建一个指向父类的子类对象,Java不支持向下转型,只能向上转型,可以创建一个指向子类的父类对象;