初始化与清理的理解二

1、方法重载

任何程序设计语言都具备的一项重要特性就是对名字的运用。当创建一个对象时,也就给此对象分配到的存储空间取了一个名字。所谓方法则是给某个动作取的名字。通过使用名字,你可以引用所有的对象和方法。名字起的好可以使系统更易于理解和修改。

大多数程序设计语言(尤其是C)要求为每个方法(在这些语言中经常称为函数)都提供一个独一无二的标识符。所以绝不能用名为print()的函数显示了整数之后,又用一个名为print()的函数显示浮点数----每个函数都要有唯一的名称。

在java(和C++)里,构造器是强制重载方法名的另一个原因。既然构造器的名字已经由类名所决定,就只能有一个构造器名。那么要想用多种方式创建一个对象该怎么办呢?假设你要创建一个类,既可以用标准方式进行初始化,也可以从文件里读取信息来初始化。这就需要两个构造器:一个默认构造器,另一个取字符串作为形式参数---该字符串表示初始化对象所需的文件名称。由于都是构造器,所有它们必须有相同的名字,即类名。为了让方法名相同而形式参数不同的构造器同时存在,必须用到方法重载。同时,尽管方法重载是构造器所必须的,但它亦可应用于其他方法,且用法同样方便。

一、区分重载方法

要是几个方法有相同的名字,java如何才能知道你指的是哪一个呢?其实规则很简单:每个重载的方法都必须有一个独一无二的参数类型列表。

甚至参数顺序的不同也足以区分两个方法。不过,一般情况下别这么做,因为这会使代码难以维护。

二、涉及基本类型的重载

基本类型能从一个“较小”的类型自动提升至一个“较大”的类型,此过程一旦牵涉到重载,可能会造成一些混淆。

你会发现常数值5被当作int值处理,所有如果有某个重载方法接受int型参数,它就会被调用。至于其他情况,如果传入的数据类型(实际参数类型)小于方法中声明的形式参数类型,实际数据类型就会被提升。char型略有不同,如果无法找到恰好接受char参数的方法,就会把char直接提升至int型。

如果传入的实际参数大于重载方法声明的形式参数,出现什么情况?

在这里,方法接受较小的基本类型作为参数,如果传入的实际参数较大,就得通过类型转换来执行窄化转换。如果不这样做,编译器就会报错。

三、以返回值区分重载方法

例如: void f() {}         int  f() { return 1; }

两个方法虽然有相同的名字和形式参数,但却很容易区分它们。

只要编译器可以根据语境明确判断出语义,比如在int  x = f() 中,那么的确可以据此区分重载方法。不过,有时你并不关心方法的返回值,你想要的是方法调用的其他效果(这常被称为“为了副作用而调用”)这时你可能会调用方法而忽略其返回值。所以,根据方法的返回值来区分重载方法是行不通的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值