7.3 构造函数的重载

最后更新于:2022-04-01 14:11:14

这一节我们来学习一下构造函数的重载。 说到重载,我们在函数那一章已经学习过了,为了更好的理解构造函数的重载,我们先要弄明白一个问题: 那就是什么时候定义构造函数呢? 在描述事物时,该事物已存在就具备一些内容,这些内容都定义在构造函数中。 我们来看例子: ~~~ class Person { private String name; private int age; Person() { System.out.println("person run"); } public void speak() { System.out.println(name+":"+age); } } ~~~ 我们来测试一下: ~~~ class ConsDemo { public static void main(String[] args) { Person p = new Person();//此时调用了构造函数 p.speak(); } } ~~~ 结果: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-05-18_573c41afb95ea.jpg) 此时打印结果为null和0,就是说我们从来没有对成员变量赋过值。 那么当我们想要在创建Person对象时成员变量就有值,可以定义这样的构造函数: ~~~ class Person { private String name; private int age; Person()//构造函数,分别为成员变量name和age赋值 { name = "baby"; age = 1; System.out.println("person run"); } public void speak() { System.out.println(name+":"+age); } } ~~~ 测试 ~~~ class ConsDemo { public static void main(String[] args) { Person p = new Person(); p.speak(); } } ~~~ 我们看到结果: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-05-18_573c41afcd8c2.jpg) 那么如果我们要使一个Person对象一出生就有名字,那么我们可以定义如下一个构造函数: ~~~ class Person { private String name; private int age; Person()//构造函数,分别为成员变量name和age赋固定的值 { name = "baby"; age = 1; System.out.println("person run"); } Person(String n)//构造函数,有一个初始name参数 { name = n; } public void speak() { System.out.println(name+":"+age); } } ~~~ 我们来测试一下: ~~~ class ConsDemo { public static void main(String[] args) { Person p = new Person(); p.speak(); Person p1 = new Person("旺财"); p1.speak(); } } ~~~ 看一下结果: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-05-18_573c41afe10d9.jpg) 同理,我们可以定义另外一个构造函数,把name和age两个参数同时初始化 ~~~ class Person { private String name; private int age; Person()//构造函数,分别为成员变量name和age赋固定的值 { name = "baby"; age = 1; System.out.println("person run"); } Person(String n)//构造函数,有一个初始name参数 { name = n; } Person(String n,int a) { name = n; age = a; } public void speak() { System.out.println(name+":"+age); } } ~~~ 测试: ~~~ class ConsDemo { public static void main(String[] args) { Person p = new Person(); p.speak(); Person p1 = new Person("旺财"); p1.speak(); Person p2 = new Person("小强",10); p2.speak(); } } ~~~ 结果: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-05-18_573c41aff3aab.jpg) 从上面我们看到,一个类中我们定义了多个构造函数,它们的参数各不相同,这种现象就是构造函数的重载。 通过构造函数的重载,我们可以通过不同的构造函数初始化不同的对象。
';