构造函数
构造函数: 在Java中任何变量在被使用之前都必须先赋值,因此java就提供了一个专门为类的成员变量赋值的方法-构造方法。对构造方法的称呼在不同书籍中有所不同主要称作:构造器,构造函数。 构造方法是一种特殊的成员方法,它的定义方式与普通方法类似,以下是其基础语法: class [类名] { [访问权限] [类名] () { // 无参构造。 } } class [类名] { [访问权限] [类名] ([类型A] [参数A] , [类型B] [参数B] , .....) { // 有参构造。 } } 构造函数有以下几个特点: -> 构造方法的名称与类名相同。 -> 构造方法没有返回值,也没有返回类型。 -> 构造方法可以有重载,所以每一个类可以有多个构造方法。 -> 构造方法在创建对象的时候会自动执行,一般不能显式的直接调用。 -> 构造方法如果不手动创建,系统会默认创建无参的构造方法来为对象的属性赋值。 -> 构造方法不能重写,也就是子类不继承父类有特定功能的构造方法。但是子类在继承父类的时候会自动调用父类的无参构造方法,为父类的成员赋值。(说白了就是只要创建对象就会调用当前这个对象的构造方法,而如果没有定义其他的有参构造,那默认就会调用无参构造方法。) 这里有一道题目可以研究一下: class B{ B(String name){} } 如果classA继承classB,并且classA只有一个构造函数,那么以下哪个函数是classA的合法构造函数? A. A(){}. B. A(){supper();}. C. A(){supper("apple");}. D. 在没有定义构造函数的时候,系统会提供默认的构造函数。 题目解析:做这道题目的时候要抓住两个点:构造函数的特性,继承的特性。 分析:首先,代码中class B已经创建了一个有参构造,那也就是说在B类中有且只有一个构造函数。而class A没有给出明确的代码,那就说明class A只有一个构造方法那就是无参构造。可是呢,这只是初级的推演,这道题目的重点是继承,既然继承有参构造的classB,那么初始化的时候就一定会对classB进行初始化,也就是说在classA中必定有一个初始化classB的构造方法,但是构造函数的其中一个特性就是不能够重写,那么classB重点有参构造不可能被重写在classA中,此时会用到一个符咒(关键字)super。那么此时四个答案中就可以直接排除A&B。由于classB中的无参构造已经不存在了(当手动创建有参构造后无参构造会默认失效),所以答案B也就可以排除了。 至此,得出答案为:C。