构造函数

构造函数:
    在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。

 

posted @ 2019-07-04 00:49  我需要一杯水  阅读(265)  评论(0编辑  收藏  举报