
上QQ阅读APP看书,第一时间看更新
3.1 构造函数
构造函数对于结构化编程的程序员来说是个新概念。非面向对象的语言(比如COBOL、C和Basic)通常不会用到构造函数。C/C++中的结构体(struct)具有构造函数。在前两章中,我们提到过这个用于构造对象的特殊方法。在诸如Java和C#之类的面向对象的语言中,构造函数是名称与类名相同的方法。而Visual Basic .NET使用指定的名称New,Swift使用init关键字。通常这里我们只关注构造函数概念,而不会介绍所有语言的特殊语法。接下来用Java代码来实现一个构造函数。
例如,第2章中的Cabbie类的构造函数如下所示:

编译器会意识到这个方法名与类名完全相同,所以认为该方法是个构造函数。
小心
注意Java代码(以及C#和C++)中,构造函数没有返回值。如果有返回值,编译器就不认为该方法是构造函数。
例如,如果类中有以下代码,那么编译器不会认为该方法是构造函数,因为它有返回值,这个返回值是一个整数:

该语法要求会导致问题,因为这段代码可以编译,但却得不到期望的行为。