这一节我们来学习一下构造函数的重载。
说到重载,我们在函数那一章已经学习过了,为了更好的理解构造函数的重载,我们先要弄明白一个问题:
那就是什么时候定义构造函数呢?
在描述事物时,该事物已存在就具备一些内容,这些内容都定义在构造函数中。
我们来看例子:
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(); } }
结果:
此时打印结果为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(); } }
我们看到结果:
那么如果我们要使一个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(); } }
看一下结果:
同理,我们可以定义另外一个构造函数,把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(); } }
结果:
从上面我们看到,一个类中我们定义了多个构造函数,它们的参数各不相同,这种现象就是构造函数的重载。
通过构造函数的重载,我们可以通过不同的构造函数初始化不同的对象。
时间: 2024-11-12 04:08:36