构造函数


Java中,任何变量在被使用前都必须先赋初值,因此Java就提供了一个专门为类的成员就量赋初值的方法--构造方法,对构造方法的称呼是不同的,有的书籍称它为构造器,还有的书籍称它为构造函数。下面,就具体学习一下如何使用构造方法。

9.9.1  实例分析:选择合法的构造函数(面试题)

构造方法是一种特殊的成员方法,它的定义方式与普通方法类似,其语法如下所示:

class 类名称 {

访问权限 类名称(类型1 参数1,类型2 参数2,…) {  // 构造方法没有返回值

程序语句

}

}

在使用构造方法的时候请注意以下几点:

q  它具有与类名相同的名称

q  它没有返回值,也没有返回类型。

q  每一个类可以有多个构造方法。

q  构造方法在创建对象时自动执行,一般不能显式地直接调用。

也许大家有的可能会这样的疑问在以前的程序中并没有声明任何构造方法,而程序不也一样正常运行了吗?其实在执行javac编译java程序的时候,如果在程序中没有明确声明一个构造方法的话,系统会自动为类加入一个无参的且什么都不做的构造方法这个构造方法就叫做无参构造方法。类似于这个代码:public Person(){}。在创建对象时,使用这个无参的构造方法为类对象的成员变量赋数据类型的默认值,例如,int longdoublechar等。一但用户定义了自己的构造方法,这个无参构造方法就不能再被使用。

Java里,不仅普通方法可以重载,构造方法也可以重载。只要构造方法的参数个数不同,或是参数类型不同,便可定义多个构造方法。但是值得的注意的是构造方法不能重写,也就是子类不继承父类有特定功能的构造方法。但是子类在继承父类的时候会自动调用父类的无参的构造方法,为父类的成员赋初值。

【考题题干】请看如下代码:

class B {

     B(String name) { }

.  }

如果class A.继承class B,并且class A只有一个构造函数,那么下面哪个函数是classA的合法构造函数?

AA() { }

BA() { super(); }

CA() { super(fido); }

D.在没有定义构造函数的时候,系统会提供默认的构造函数。

【试题分析】在做这道题的时候,要抓住两个要点:继承、一个、数在整个做题的过程中,中心都要围绕着这三个要点,答案会很容易得出来的。

因为前提以经告诉大家了,A继承B,那么A就会拥有B的所有的公有的变量和方法,也包括系统默认的不带任何参数的构造方法。Java在执行子类的构造方法之前,会先调用父类中无参的构造方法,其目的是为了对继承自父类的成员做初始化的操作。当父类有数个构造方法时,如要调用特定的构造方法,则可在子类的构造方法中,通过super()这个关键字来完成。因为父类的构造方法中传入了一个字符串变量,所以在子类调用父类的构造方法必须也得传入了一个字符串或字符串变量,因此符合以上条件的选项只有C,故C是正确的。

B是不符合父类的构造方法的条件,没有传入参数。那AD错在哪里呢?如果你不知道错在哪的话,那么就错在你没有仔细的看清题意,“class A只有一个构造函数”。AD本身是正确的,可是放在这就错了,就是因为受到了此题意的限制。

【参考答案】C

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值